This is an R Markdown
Notebook. When you execute code within the notebook, the results appear
beneath the code.
Try executing this chunk by clicking the Run button within
the chunk or by placing your cursor inside it and pressing
Cmd+Shift+Enter.
plot(cars)

Add a new chunk by clicking the Insert Chunk button on the
toolbar or by pressing Cmd+Option+I.
When you save the notebook, an HTML file containing the code and
output will be saved alongside it (click the Preview button or
press Cmd+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the
editor. Consequently, unlike Knit, Preview does not
run any R code chunks. Instead, the output of the chunk when it was last
run in the editor is displayed.
setwd("/Users/jayshreenohar/Downloads")
##Merge datasets
df_Johnson_2017
#Nasdaq
#2017-2018
df_NASDAQ <- merge(Tweets_Nasdaq, NASDAQ_new, by = "date", all.x = TRUE)
write.csv(df_NASDAQ, file = "Nasdaq_2017", row.names = FALSE)
df_NASDAQ
#Autodesk
#2018
df_autodesk <- merge(Autodesk_Tweets, Autodesk_SP_2018, by = "date", all.x = TRUE)
write.csv(df_autodesk, file = "autodesk_2018", row.names = FALSE)
df_autodesk
#Hasbro
#2018
df_Hasbro_2018 <- merge(Hasbro_Tweets_2018, Hasbro_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Hasbro_2018, file = "Hasbro_2018", row.names = FALSE)
#2016
df_Hasbro_2016 <- merge(Hasbro_Tweets_2016, Hasbro_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Hasbro_2016, file = "Hasbro_2018", row.names = FALSE)
df_Hasbro_2016
df_Hasbro_2018
#Intel
#2018
df_Intel_2018 <- merge(Intel_Tweets_2018, Intel_2018_SP, by = "date", all.x = TRUE)
write.csv(df_Intel_2018, file = "Intel_2018", row.names = FALSE)
#2016
df_Intel_2016 <- merge(Intel_Tweets_2016, Intel_2016, by = "date", all.x = TRUE)
write.csv(df_Intel_2016, file = "Intel_2016", row.names = FALSE)
df_Intel_2016
df_Intel_2018
#Activision
#2016
df_Activision_2016 <- merge(Activision_Tweets_2016, Activision_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Activision_2016, file = "Activision_2016", row.names = FALSE)
#2018
df_Activision_2018 <- merge(Activision_Tweets_2018, Activision_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Activision_2018, file = "Activision_2018", row.names = FALSE)
df_Activision_2016
df_Activision_2018
#Inuit
#2016
df_Inuit_2016 <- merge(Tweets_Inuit_2016, Inuit_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Inuit_2016, file = "Intuit_2016", row.names = FALSE)
#2018
df_Inuit_2018 <- merge(Tweets_Inuit_2018, Intuit_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Inuit_2018, file = "Intuit_2018", row.names = FALSE)
df_Inuit_2016
df_Inuit_2018
#Allergan
#2016
df_Allergan_2016 <- merge(Allergan_Tweets_2016, Allergan_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Allergan_2016, file = "Allergan_2016", row.names = FALSE)
#2018
df_Allergan_2018 <- merge(Allergan_Tweets_2018, Allergan_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Allergan_2018, file = "Allergan_2018", row.names = FALSE)
df_Allergan_2016
df_Allergan_2018
#Humana
#2016
df_Humana_2016 <- merge(Humana_Tweets_2016, Humana_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Humana_2016, file = "Humana_2016", row.names = FALSE)
#2018
df_Humana_2018 <- merge(Humana_2018_Tweets, Humana_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Humana_2018, file = "Humana_2018", row.names = FALSE)
df_Humana_2016
df_Humana_2018
#Autodesk_Carl_Bass
#2016
df_CB_autodesk_2016 <- merge(Autodesk_CB_tweets_2016, Autodesk_CB_SP_2016, by = "date", all.x = TRUE)
write.csv(df_CB_autodesk_2016, file = "Autodesk_CB_2016", row.names = FALSE)
#2018
df_CB_autodesk_2018 <- merge(Autodesk_CB_tweets_2017, Autodesk_2017_SP_CB, by = "date", all.x = TRUE)
write.csv(df_CB_autodesk_2018, file = "Autodesk_CB_2018", row.names = FALSE)
df_CB_autodesk_2016
df_CB_autodesk_2018
#Equinox
#2018
df_equinox_2018 <- merge(Equinox_2018_Tweets, Equinox_2018_SP, by = "date", all.x = TRUE)
write.csv(df_equinox_2018, file = "Equinox_2018", row.names = FALSE)
df_equinox_2018
#Cisco
#2016
df_cisco_2016 <- merge(Cisco_Tweets_2016, Cisco_SP_2016, by = "date", all.x = TRUE)
write.csv(df_cisco_2016, file = "Cisco_2016", row.names = FALSE)
#2018
df_cisco_2018 <- merge(Cisco_Tweets_2018, Cisco_SP_2018, by = "date", all.x = TRUE)
write.csv(df_cisco_2018, file = "Cisco_2018", row.names = FALSE)
df_cisco_2016
df_cisco_2018
#EBAY
#2016
df_EBAY_2016 <-merge(EBAY_Tweets_2016, EBAY_2016_SP, by = "date", all.x = TRUE)
write.csv(df_EBAY_2016, file = "EBAY_2016", row.names = FALSE)
#2018
df_EBAY_2018 <-merge(EBAY_Tweets_2018, EBAY_SP_2018, by = "date", all.x = TRUE)
write.csv(df_EBAY_2018, file = "EBAY_2018", row.names = FALSE)
df_EBAY_2016
df_EBAY_2018
#Davita
#2016
df_Davita_2016 <-merge(Tweets_Davita_2016, Davita_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Davita_2016, file = "Davita_2016", row.names = FALSE)
#2017
df_Davita_2017 <-merge(Davita_Inc_Tweets_2017, Davita_SP_2017, by = "date", all.x = TRUE)
write.csv(df_Davita_2017, file = "Davita_2017", row.names = FALSE)
df_Davita_2016
df_Davita_2017
#Illumina
#2016
df_Illumina_2016 <-merge(Illumina_Tweets_2016, Illumina_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Illumina_2016, file = "Illumina_2016", row.names = FALSE)
#2018
df_Illumina_2018 <-merge(Illumina_Tweets_2017_2018, Illumina_2017_2018_SP, by = "date", all.x = TRUE)
write.csv(df_Illumina_2018, file = "Illumina_2018", row.names = FALSE)
df_Illumina_2016
df_Illumina_2018
#HomeDepot
#2013-2014
df_Homedepot_2013 <-merge(Home_depot_tweets_2013,Home_Depot_SP, by = "date", all.x = TRUE)
write.csv(df_Homedepot_2013, file = "Homedepot_2013", row.names = TRUE)
df_Homedepot_2013
#Southwest_Airlines
#2016
df_Southwest_2016 <-merge(Southwest_Tweets_2016,Southwest_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Southwest_2016, file = "Southwest_2016", row.names = FALSE)
#2018
df_Southwest_2018 <-merge(Southwest_Tweets_2018,Southwest_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Southwest_2018, file = "Southwest_2018", row.names = FALSE)
df_Southwest_2016
df_Southwest_2018
#FIS
#2016
df_FIS_2016 <-merge(FIS_Tweets_2016, FIS_2016_SP, by = "date", all.x = TRUE)
write.csv(df_FIS_2016, file = "FIS_2016", row.names = FALSE)
#2018
df_FIS_2018 <-merge(FIS_Tweets_2018, FIS_2018_SP, by = "date", all.x = TRUE)
write.csv(df_FIS_2018, file = "FIS_2018", row.names = FALSE)
df_FIS_2016
df_FIS_2018
#Leucadia_Nation
#2016
df_Leucadia_2016 <-merge(Leucadia_Tweets_2016, Leucadia_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Leucadia_2016, file = "Leucadia_2016", row.names = FALSE)
#2018
df_Leucadia_2018 <-merge(Leucadia_2018_Tweets, Leucadia_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Leucadia_2018, file = "Leucadia_2018", row.names = FALSE)
df_Leucadia_2016
df_Leucadia_2018
#Verizon
#2018
df_Verizon_2018 <- merge(Verizon_Tweets_2018, Verizon_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Verizon_2018, file = "Verizon_2018", row.names = FALSE)
df_Verizon_2018
#Western Union
#2018
df_WU_2018 <- merge(Western_Union_Tweets_2018, WU_SP_2018, by = "date", all.x = TRUE)
write.csv(df_WU_2018, file = "WU_2018", row.names = FALSE)
#2016
df_WU_2016 <- merge(Western_Union_Tweets_2016, WU_SP_2016, by = "date", all.x = TRUE)
write.csv(df_WU_2016, file = "WU_2016", row.names = FALSE)
df_WU_2016
df_WU_2018
#Red_Hat
#2016
df_RedHat_2016 <- merge(Red_Hat_Tweets_2016, Red_Hat_SP_2016, by = "date", all.x = TRUE)
write.csv(df_RedHat_2016, file = "RedHat_2016", row.names = FALSE)
#2018
df_RedHat_2018 <- merge(Red_Hat_Tweets_2018, Red_Hat_SP_2018, by = "date", all.x = TRUE)
write.csv(df_RedHat_2018, file = "RedHat_2018", row.names = FALSE)
df_RedHat_2016
df_RedHat_2018
#AMZN
#2016
df_AMZN_2016 <- merge(AMZN_Tweets_2016, AMZN_SP_2016, by = "date", all.x = TRUE)
write.csv(df_AMZN_2016, file = "AMZN_2016", row.names = FALSE)
#2018
df_AMZN_2018 <- merge(AMZN_Tweets_2018, AMZN_SP_2018, by = "date", all.x = TRUE)
write.csv(df_AMZN_2018, file = "AMZN_2018", row.names = FALSE)
df_AMZN_2016
df_AMZN_2018
#GE
#2016
df_GE_2016 <- merge(GE_Tweets_2016, GE_2016_SP, by = "date", all.x = TRUE)
write.csv(df_GE_2016, file = "GE_2016", row.names = FALSE)
#2017
df_GE_2017 <- merge(GE_Tweets_2017, GE_2017_SP, by = "date", all.x = TRUE)
write.csv(df_GE_2017, file = "GE_2017", row.names = FALSE)
df_GE_2016
df_GE_2017
#Fiserv
#2016
df_Fiserv_2016 <- merge(Fiserv_Tweets_2016, Fiserv_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Fiserv_2016, file = "Fiserv_2016", row.names = FALSE)
#2018
df_Fiserv_2018 <- merge(Fiserv_Tweets_2018, Fiserv_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Fiserv_2018, file = "Fiserv_2018", row.names = FALSE)
df_Fiserv_2016
df_Fiserv_2018
#Waste_Management
#2018
df_WM_2018 <- merge(WM_Tweets_2018, WM_SP_2018, by = "date", all.x = TRUE)
write.csv(df_WM_2018, file = "WM_2018", row.names = FALSE)
df_WM_2018
#Wills_Tower
#2016
df_Wills_2016 <- merge(Wills_Tower_Tweets_2016, Wills_Tower_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Wills_2016, file = "Wills_2016", row.names = FALSE)
#2018
df_Wills_2018 <- merge(Wills_Tower_Tweets_2018, WLTW_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Wills_2018, file = "Wills_2018", row.names = FALSE)
df_Wills_2016
df_Wills_2018
#Tripadvisor
#2016
df_tripadvisor_2016 <- merge(Tripadvisor_Tweets_2016, Tripadvisor_SP_2016, by = "date", all.x = TRUE)
write.csv(df_tripadvisor_2016, file = "Tripadvisor_2016", row.names = FALSE)
#2018
df_tripadvisor_2018 <- merge(Tripadvisor_Tweets_2018, Tripadvisor_SP_2018, by = "date", all.x = TRUE)
write.csv(df_tripadvisor_2018, file = "Tripadvisor_2018", row.names = FALSE)
df_tripadvisor_2016
df_tripadvisor_2018
#Davita_Kent
#2016
df_DavitaK_2016 <- merge(Davita_Tweets_2016K, Davita_SP_2016, by = "date", all.x = TRUE)
write.csv(df_DavitaK_2016, file = "Davita_K_2016", row.names = FALSE)
#2018
df_DavitaK_2018 <- merge(Davita_Tweets_2018K, Davita_SP_2018, by = "date", all.x = TRUE)
write.csv(df_DavitaK_2018, file = "Davita_K_2018", row.names = FALSE)
df_DavitaK_2016
df_DavitaK_2018
#Starbucks
df_Starbucks_2018 <- merge(Starbucks_Tweets_2018, Starbucks_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Starbucks_2018, file = "Starbucks_2018", row.names = FALSE)
df_Starbucks_2018
#McCormick
#2018
df_McCormick_2018 <- merge(McCormick_Tweets_2018, McCormick_SP_2018, by = "date", all.x = TRUE)
write.csv(df_McCormick_2018, file = "McCormick_2018", row.names = FALSE)
df_McCormick_2018
#IHS Markit
#2018
df_IHS_2018 <- merge(IHS_Tweets_2018, IHS_SP_2018, by = "date", all.x = TRUE)
write.csv(df_IHS_2018, file = "IHS_2018", row.names = FALSE)
df_IHS_2018
#AMD
#2018
df_AMD_2018 <- merge(AMD_Tweets_2018, AMD_SP_2018, by = "date", all.x = TRUE)
write.csv(df_AMD_2018, file = "AMD_2018", row.names = FALSE)
df_AMD_2018
#ResMed
#2016
df_ResMed_2016 <-merge(ResMed_Tweets_2016, ResMed_SP_2016, by = "date", all.x = TRUE)
write.csv(df_ResMed_2016, file = "ResMed_2016", row.names = FALSE)
#2018
df_ResMed_2018 <-merge(ResMed_Tweets_2018, ResMed_SP_2018, by = "date", all.x = TRUE)
write.csv(df_ResMed_2018, file = "ResMed_2018", row.names = FALSE)
df_ResMed_2016
df_ResMed_2018
#CA
#2016
df_CA_2016 <-merge(CA_Tweets_2016, CA_SP_2016, by = "date", all.x = TRUE)
write.csv(df_CA_2016, file = "CA_2016", row.names = FALSE)
#2018
df_CA_2018 <-merge(CA_Tweets_2018, CA_SP_2018, by = "date", all.x = TRUE)
write.csv(df_CA_2018, file = "CA_2018", row.names = FALSE)
df_CA_2016
df_CA_2018
#General_Motors
#2016
df_GM_2016 <-merge(GM_Tweets_2016, GM_SP_2016, by = "date", all.x = TRUE)
write.csv(df_GM_2016, file = "GM_2016", row.names = FALSE)
#2018
df_GM_2018 <-merge(GM_Tweets_2018, GM_SP_2018, by = "date", all.x = TRUE)
write.csv(df_GM_2018, file = "GM_2018", row.names = FALSE)
df_GM_2016
df_GM_2018
#Aetna
#2016
df_Aetna_2016 <-merge(Aetna_Tweets_2016, AET_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Aetna_2016, file = "Aetna_2016", row.names = FALSE)
#2018
df_Aetna_2018 <-merge(Aetna_Tweets_2018, Aetna_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Aetna_2018, file = "Aetna_2018", row.names = FALSE)
df_Aetna_2016
df_Aetna_2018
#NRG
#2016
df_NRG_2016 <-merge(NRG_Tweets_2016, NRG_SP_2016, by = "date", all.x = TRUE)
write.csv(df_NRG_2016, file = "NRG_2016", row.names = FALSE)
#2018
df_NRG_2018 <-merge(NRG_Tweets_2018, NRG_SP_2018, by = "date", all.x = TRUE)
write.csv(df_NRG_2018, file = "NRG_2018", row.names = FALSE)
df_NRG_2016
df_NRG_2018
#Medtronic
#2016
df_Medtronic_2016 <-merge(Medtronic_Tweets_2016, Medtronic_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Medtronic_2016, file = "Medtronic_2016", row.names = FALSE)
#2018
df_Medtronic_2018 <-merge(Medtronic_Tweets_2018, Medtronic_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Medtronic_2018, file = "Medtronic_2018", row.names = FALSE)
df_Medtronic_2016
df_Medtronic_2018
#Juniper
#2016
df_Juniper_2016 <-merge(Juniper_Tweets_2016, Juniper_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Juniper_2016, file = "Juniper_2016", row.names = FALSE)
#2018
df_Juniper_2018 <-merge(Juniper_Tweets_2018, Juniper_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Juniper_2018, file = "Juniper_2018", row.names = FALSE)
df_Juniper_2016
df_Juniper_2018
#Aetna_Ramon_2018
#2018
df_AetnaR_2018 <-merge(Aetna_Tweets_2018R, AetnaR_SP_2018, by = "date", all.x = TRUE)
write.csv(df_AetnaR_2018, file = "AetnaR_2018", row.names = FALSE)
df_AetnaR_2018
#Netflix
#2016
df_Netflix_2016 <-merge(Netflix_Tweets_2016, Netflix_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Netflix_2016, file = "Netflix_2016", row.names = FALSE)
df_Netflix_2016
#Disney
df_Disney_2018 <-merge(Disney_Tweets_2018, Disney_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Disney_2018, file = "Disney_2018", row.names = FALSE)
df_Disney_2018
#FOX
#2015
df_Fox_2015 <-merge(Fox_Tweets_2015, Fox_SP_2015, by = "date", all.x = TRUE)
write.csv(df_Fox_2015, file = "Fox_2015", row.names = FALSE)
df_Fox_2015
#Microsoft
#2016
df_Microsoft_2016 <-merge(Microsoft_Tweets_2016, Microsoft_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Microsoft_2016, file = "Microsoft_2016", row.names = FALSE)
#2018
df_Microsoft_2018 <-merge(Microsoft_Tweets_2018, Microsoft_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Microsoft_2018, file = "Microsoft_2018", row.names = FALSE)
df_Microsoft_2016
df_Microsoft_2018
#Juniper_Shaygan
#2014
df_Juniper_S_2014 <-merge(JuniperS_Tweets_2014, Juniper_SP_2014, by = "date", all.x = TRUE)
write.csv(df_Juniper_S_2014, file = "Juniper_S_2014", row.names = FALSE)
df_Juniper_S_2014
df_Juniper_S_2016
#Synchrony Financial
#2016
df_SYFM_2016 <-merge(SYFM_Tweets_2016, SYF_SP_2016, by = "date", all.x = TRUE)
write.csv(df_SYFM_2016, file = "SYFM_2016", row.names = FALSE)
#2018
df_SYFM_2018 <-merge(SYFM_Tweets_2018, SYFM_SP_2018, by = "date", all.x = TRUE)
write.csv(df_SYFM_2018, file = "SYFM_2018", row.names = FALSE)
df_SYFM_2016
df_SYFM_2018
#Southern Company
#2016
df_Southern_2016 <-merge(SouthernC_Tweets_2016, SO_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Southern_2016, file = "Southern_2016", row.names = FALSE)
#2018
df_Southern_2018 <-merge(SouthernC_Tweets_2018, SO_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Southern_2018, file = "Southern_2018", row.names = FALSE)
df_Southern_2016
df_Southern_2018
#Apple
#2016
df_Apple_2016 <-merge(Apple_Tweets_2016, Apple_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Apple_2016, file = "Apple_2016", row.names = FALSE)
#2018
df_Apple_2018 <-merge(Apple_Tweets_2018, Apple_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Apple_2018, file = "Apple_2018", row.names = FALSE)
df_Apple_2016
df_Apple_2018
#XL
#2016
df_XL_2016 <-merge(XL_Tweets_2016, XL_SP_2016, by = "date", all.x = TRUE)
write.csv(df_XL_2016, file = "XL_2016", row.names = FALSE)
#2018
df_XL_2018 <-merge(XL_Tweets_2018, XL_SP_2018, by = "date", all.x = TRUE)
write.csv(df_XL_2018, file = "XL_2018", row.names = FALSE)
df_XL_2016
df_XL_2018
#Tysonfoods
#2016
df_Tysonf_2016 <-merge(TSN_Tweets_2016, TSN_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Tysonf_2016, file = "TSN_2016", row.names = FALSE)
#2018
df_Tysonf_2018 <-merge(TSN_Tweets_2018, TSN_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Tysonf_2018, file = "TSN_2018", row.names = FALSE)
df_Tysonf_2016
df_Tysonf_2018
#Akamai
#2016
df_Akamai_2016 <-merge(Akamai_Tweets_2016, Akamai_SP_2016, by = "date", all.x = TRUE)
write.csv(df_Akamai_2016, file = "Akamai_2016", row.names = FALSE)
#2018
df_Akamai_2018 <-merge(Akamai_Tweets_2018, Akamai_SP_2018, by = "date", all.x = TRUE)
write.csv(df_Akamai_2018, file = "Akamai_2018", row.names = FALSE)
df_Akamai_2016
df_Akamai_2018
###Clean
#Packages
library(tm)
library(stringr)
#Function to clean the tweets
clean_tweets <- function(tweets) {
# Convert text to lower case
tweets <- tolower(tweets)
# Remove URLs
tweets <- stringr::str_replace_all(tweets, "http[^[:space:]]*", "")
# Remove mentions
tweets <- stringr::str_replace_all(tweets, "@[^[:space:]]*", "")
# Remove hashtags
tweets <- stringr::str_replace_all(tweets, "#[^[:space:]]*", "")
# Remove punctuation marks
tweets <- stringr::str_replace_all(tweets, "[[:punct:]]", "")
# Remove numbers
tweets <- stringr::str_replace_all(tweets, "[[:digit:]]", "")
# Remove common stop words
tweets <- tm::removeWords(tweets, tm::stopwords("en"))
return(tweets)
}
#Lemmatize
df_Test$text <- lemmatize_words(df_Test$text)
#Numeric NA values & Tweets
#Johnson
#Remove columns
df_Johnson_2016 <- df_Johnson_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Johnson_2016
#Ticker
df_Johnson_2016$TICKER[is.na(df_Johnson_2016$TICKER)] <- "JCI"
#PRC
PRC_AVG <- mean(df_Johnson_2016$PRC, na.rm = TRUE)
df_Johnson_2016$PRC[is.na(df_Johnson_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Johnson_2016$VOL, na.rm = TRUE)
df_Johnson_2016$VOL[is.na(df_Johnson_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Johnson_2016$BID, na.rm = TRUE)
df_Johnson_2016$BID[is.na(df_Johnson_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Johnson_2016$ASK, na.rm = TRUE)
df_Johnson_2016$ASK[is.na(df_Johnson_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Johnson_2016$OPENPRC, na.rm = TRUE)
df_Johnson_2016$OPENPRC[is.na(df_Johnson_2016$OPENPRC)] <- OPEN_AVG
df_Johnson_2016
df_Johnson_2016$text <- clean_tweets(df_Johnson_2016$text)
df_Johnson_2016$text <- lemmatize_words(df_Johnson_2016$text)
#Remove columns
df_Johnson_2017 <- df_Johnson_2017[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Johnson_2017
#Ticker
df_Johnson_2017$TICKER[is.na(df_Johnson_2017$TICKER)] <- "JCI"
#PRC
PRC_AVG <- mean(df_Johnson_2017$PRC, na.rm = TRUE)
df_Johnson_2017$PRC[is.na(df_Johnson_2017$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Johnson_2017$VOL, na.rm = TRUE)
df_Johnson_2017$VOL[is.na(df_Johnson_2017$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Johnson_2017$BID, na.rm = TRUE)
df_Johnson_2017$BID[is.na(df_Johnson_2017$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Johnson_2017$ASK, na.rm = TRUE)
df_Johnson_2017$ASK[is.na(df_Johnson_2017$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Johnson_2017$OPENPRC, na.rm = TRUE)
df_Johnson_2017$OPENPRC[is.na(df_Johnson_2017$OPENPRC)] <- OPEN_AVG
df_Johnson_2017
df_Johnson_2017$text <- clean_tweets(df_Johnson_2017$text)
df_Johnson_2017$text <- lemmatize_words(df_Johnson_2017$text)
#NASDAQ
#Remove columns
df_NASDAQ <- df_NASDAQ[,-c(6,8,9,10,15,17,18,19,20,21)]
df_NASDAQ
#Ticker
df_NASDAQ$TICKER[is.na(df_NASDAQ$TICKER)] <- "NDAQ"
#PRC
PRC_AVG <- mean(df_NASDAQ$PRC, na.rm = TRUE)
df_NASDAQ$PRC[is.na(df_NASDAQ$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_NASDAQ$VOL, na.rm = TRUE)
df_NASDAQ$VOL[is.na(df_NASDAQ$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_NASDAQ$BID, na.rm = TRUE)
df_NASDAQ$BID[is.na(df_NASDAQ$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_NASDAQ$ASK, na.rm = TRUE)
df_NASDAQ$ASK[is.na(df_NASDAQ$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_NASDAQ$OPENPRC, na.rm = TRUE)
df_NASDAQ$OPENPRC[is.na(df_NASDAQ$OPENPRC)] <- OPEN_AVG
df_NASDAQ
df_NASDAQ$text <- clean_tweets(df_NASDAQ$text)
df_NASDAQ$text <- lemmatize_words(df_NASDAQ$text)
#Autodesk
#Remove columns
df_autodesk <- df_autodesk[,-c(6,8,9,10,15,17,18,19,20,21)]
df_autodesk
#Ticker
df_autodesk$TICKER[is.na(df_autodesk$TICKER)] <- "ADSK"
#PRC
PRC_AVG <- mean(df_autodesk$PRC, na.rm = TRUE)
df_autodesk$PRC[is.na(df_autodesk$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_autodesk$VOL, na.rm = TRUE)
df_autodesk$VOL[is.na(df_autodesk$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_autodesk$BID, na.rm = TRUE)
df_autodesk$BID[is.na(df_autodesk$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_autodesk$ASK, na.rm = TRUE)
df_autodesk$ASK[is.na(df_autodesk$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_autodesk$OPENPRC, na.rm = TRUE)
df_autodesk$OPENPRC[is.na(df_autodesk$OPENPRC)] <- OPEN_AVG
df_autodesk
df_autodesk$text <- clean_tweets(df_autodesk$text)
df_autodesk$text <- lemmatize_words(df_autodesk$text)
#Hasbro
#Remove columns
df_Hasbro_2016 <- df_Hasbro_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Hasbro_2016
#Ticker
df_Hasbro_2016$TICKER[is.na(df_Hasbro_2016$TICKER)] <- "HAS"
#PRC
PRC_AVG <- mean(df_Hasbro_2016$PRC, na.rm = TRUE)
df_Hasbro_2016$PRC[is.na(df_Hasbro_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Hasbro_2016$VOL, na.rm = TRUE)
df_Hasbro_2016$VOL[is.na(df_Hasbro_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Hasbro_2016$BID, na.rm = TRUE)
df_Hasbro_2016$BID[is.na(df_Hasbro_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Hasbro_2016$ASK, na.rm = TRUE)
df_Hasbro_2016$ASK[is.na(df_Hasbro_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Hasbro_2016$OPENPRC, na.rm = TRUE)
df_Hasbro_2016$OPENPRC[is.na(df_Hasbro_2016$OPENPRC)] <- OPEN_AVG
df_Hasbro_2016
df_Hasbro_2016$text <- clean_tweets(df_Hasbro_2016$text)
df_Hasbro_2016$text <- lemmatize_words(df_Hasbro_2016$text)
#Remove columns
df_Hasbro_2018 <- df_Hasbro_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Hasbro_2018
#Ticker
df_Hasbro_2018$TICKER[is.na(df_Hasbro_2018$TICKER)] <- "HAS"
#PRC
PRC_AVG <- mean(df_Hasbro_2018$PRC, na.rm = TRUE)
df_Hasbro_2018$PRC[is.na(df_Hasbro_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Hasbro_2018$VOL, na.rm = TRUE)
df_Hasbro_2018$VOL[is.na(df_Hasbro_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Hasbro_2018$BID, na.rm = TRUE)
df_Hasbro_2018$BID[is.na(df_Hasbro_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Hasbro_2018$ASK, na.rm = TRUE)
df_Hasbro_2018$ASK[is.na(df_Hasbro_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Hasbro_2018$OPENPRC, na.rm = TRUE)
df_Hasbro_2018$OPENPRC[is.na(df_Hasbro_2018$OPENPRC)] <- OPEN_AVG
df_Hasbro_2018
df_Hasbro_2018$text <- clean_tweets(df_Hasbro_2018$text)
df_Hasbro_2018$text <- lemmatize_words(df_Hasbro_2018$text)
#Intel
#Remove columns
df_Intel_2016 <- df_Intel_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Intel_2016
#Ticker
df_Intel_2016$TICKER[is.na(df_Intel_2016$TICKER)] <- "INTC"
#PRC
PRC_AVG <- mean(df_Intel_2016$PRC, na.rm = TRUE)
df_Intel_2016$PRC[is.na(df_Intel_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Intel_2016$VOL, na.rm = TRUE)
df_Intel_2016$VOL[is.na(df_Intel_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Intel_2016$BID, na.rm = TRUE)
df_Intel_2016$BID[is.na(df_Intel_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Intel_2016$ASK, na.rm = TRUE)
df_Intel_2016$ASK[is.na(df_Intel_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Intel_2016$OPENPRC, na.rm = TRUE)
df_Intel_2016$OPENPRC[is.na(df_Intel_2016$OPENPRC)] <- OPEN_AVG
df_Intel_2016
df_Intel_2016$text <- clean_tweets(df_Intel_2016$text)
df_Intel_2016$text <- lemmatize_words(df_Intel_2016$text)
#Remove columns
df_Intel_2018 <- df_Intel_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Intel_2018
#Ticker
df_Intel_2018$TICKER[is.na(df_Intel_2018$TICKER)] <- "INTC"
#PRC
PRC_AVG <- mean(df_Intel_2018$PRC, na.rm = TRUE)
df_Intel_2018$PRC[is.na(df_Intel_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Intel_2018$VOL, na.rm = TRUE)
df_Intel_2018$VOL[is.na(df_Intel_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Intel_2018$BID, na.rm = TRUE)
df_Intel_2018$BID[is.na(df_Intel_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Intel_2018$ASK, na.rm = TRUE)
df_Intel_2018$ASK[is.na(df_Intel_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Intel_2018$OPENPRC, na.rm = TRUE)
df_Intel_2018$OPENPRC[is.na(df_Intel_2018$OPENPRC)] <- OPEN_AVG
df_Intel_2018
df_Intel_2018$text <- clean_tweets(df_Intel_2018$text)
df_Intel_2018$text <- lemmatize_words(df_Intel_2018$text)
#Activision
#Remove columns
df_Activision_2016 <- df_Activision_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Activision_2016
#Ticker
df_Activision_2016$TICKER[is.na(df_Activision_2016$TICKER)] <- "ATVI"
#PRC
PRC_AVG <- mean(df_Activision_2016$PRC, na.rm = TRUE)
df_Activision_2016$PRC[is.na(df_Activision_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Activision_2016$VOL, na.rm = TRUE)
df_Activision_2016$VOL[is.na(df_Activision_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Activision_2016$BID, na.rm = TRUE)
df_Activision_2016$BID[is.na(df_Activision_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Activision_2016$ASK, na.rm = TRUE)
df_Activision_2016$ASK[is.na(df_Activision_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Activision_2016$OPENPRC, na.rm = TRUE)
df_Activision_2016$OPENPRC[is.na(df_Activision_2016$OPENPRC)] <- OPEN_AVG
df_Activision_2016
df_Activision_2016$text <- clean_tweets(df_Activision_2016$text)
df_Activision_2016$text <- lemmatize_words(df_Activision_2016$text)
#Remove columns
df_Activision_2018 <- df_Activision_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Activision_2018
#Ticker
df_Activision_2018$TICKER[is.na(df_Activision_2018$TICKER)] <- "ATVI"
#PRC
PRC_AVG <- mean(df_Activision_2018$PRC, na.rm = TRUE)
df_Activision_2018$PRC[is.na(df_Activision_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Activision_2018$VOL, na.rm = TRUE)
df_Activision_2018$VOL[is.na(df_Activision_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Activision_2018$BID, na.rm = TRUE)
df_Activision_2018$BID[is.na(df_Activision_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Activision_2018$ASK, na.rm = TRUE)
df_Activision_2018$ASK[is.na(df_Activision_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Activision_2018$OPENPRC, na.rm = TRUE)
df_Activision_2018$OPENPRC[is.na(df_Activision_2018$OPENPRC)] <- OPEN_AVG
df_Activision_2018
df_Activision_2018$text <- clean_tweets(df_Activision_2018$text)
df_Activision_2018$text <- lemmatize_words(df_Activision_2018$text)
#Inuit
#Remove columns
df_Inuit_2016 <- df_Inuit_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Inuit_2016
#Ticker
df_Inuit_2016$TICKER[is.na(df_Inuit_2016$TICKER)] <- "INTU"
#PRC
PRC_AVG <- mean(df_Inuit_2016$PRC, na.rm = TRUE)
df_Inuit_2016$PRC[is.na(df_Inuit_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Inuit_2016$VOL, na.rm = TRUE)
df_Inuit_2016$VOL[is.na(df_Inuit_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Inuit_2016$BID, na.rm = TRUE)
df_Inuit_2016$BID[is.na(df_Inuit_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Inuit_2016$ASK, na.rm = TRUE)
df_Inuit_2016$ASK[is.na(df_Inuit_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Inuit_2016$OPENPRC, na.rm = TRUE)
df_Inuit_2016$OPENPRC[is.na(df_Inuit_2016$OPENPRC)] <- OPEN_AVG
df_Inuit_2016
df_Inuit_2016$text <- clean_tweets(df_Inuit_2016$text)
df_Inuit_2016$text <- lemmatize_words(df_Inuit_2016$text)
#Remove columns
df_Inuit_2018 <- df_Inuit_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Inuit_2018
#Ticker
df_Inuit_2018$TICKER[is.na(df_Inuit_2018$TICKER)] <- "INTU"
#PRC
PRC_AVG <- mean(df_Inuit_2018$PRC, na.rm = TRUE)
df_Inuit_2018$PRC[is.na(df_Inuit_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Inuit_2018$VOL, na.rm = TRUE)
df_Inuit_2018$VOL[is.na(df_Inuit_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Inuit_2018$BID, na.rm = TRUE)
df_Inuit_2018$BID[is.na(df_Inuit_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Inuit_2018$ASK, na.rm = TRUE)
df_Inuit_2018$ASK[is.na(df_Inuit_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Inuit_2018$OPENPRC, na.rm = TRUE)
df_Inuit_2018$OPENPRC[is.na(df_Inuit_2018$OPENPRC)] <- OPEN_AVG
df_Inuit_2018
df_Inuit_2018$text <- clean_tweets(df_Inuit_2018$text)
df_Inuit_2018$text <- lemmatize_words(df_Inuit_2018$text)
#Allergan
#Remove columns
df_Allergan_2016 <- df_Allergan_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Allergan_2016
#Ticker
df_Allergan_2016$TICKER[is.na(df_Allergan_2016$TICKER)] <- "AGN"
#PRC
PRC_AVG <- mean(df_Allergan_2016$PRC, na.rm = TRUE)
df_Allergan_2016$PRC[is.na(df_Allergan_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Allergan_2016$VOL, na.rm = TRUE)
df_Allergan_2016$VOL[is.na(df_Allergan_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Allergan_2016$BID, na.rm = TRUE)
df_Allergan_2016$BID[is.na(df_Allergan_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Allergan_2016$ASK, na.rm = TRUE)
df_Allergan_2016$ASK[is.na(df_Allergan_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Allergan_2016$OPENPRC, na.rm = TRUE)
df_Allergan_2016$OPENPRC[is.na(df_Allergan_2016$OPENPRC)] <- OPEN_AVG
df_Allergan_2016
df_Allergan_2016$text <- clean_tweets(df_Allergan_2016$text)
df_Allergan_2016$text <- lemmatize_words(df_Allergan_2016$text)
#Remove columns
df_Allergan_2018 <- df_Allergan_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Allergan_2018
#Ticker
df_Allergan_2018$TICKER[is.na(df_Allergan_2018$TICKER)] <- "AGN"
#PRC
PRC_AVG <- mean(df_Allergan_2018$PRC, na.rm = TRUE)
df_Allergan_2018$PRC[is.na(df_Allergan_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Allergan_2018$VOL, na.rm = TRUE)
df_Allergan_2018$VOL[is.na(df_Allergan_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Allergan_2018$BID, na.rm = TRUE)
df_Allergan_2018$BID[is.na(df_Allergan_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Allergan_2018$ASK, na.rm = TRUE)
df_Allergan_2018$ASK[is.na(df_Allergan_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Allergan_2018$OPENPRC, na.rm = TRUE)
df_Allergan_2018$OPENPRC[is.na(df_Allergan_2018$OPENPRC)] <- OPEN_AVG
df_Allergan_2018
df_Allergan_2018$text <- clean_tweets(df_Allergan_2018$text)
df_Allergan_2018$text <- lemmatize_words(df_Allergan_2018$text)
#Humana
#Remove columns
df_Humana_2016 <- df_Humana_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Humana_2016
#Ticker
df_Humana_2016$TICKER[is.na(df_Humana_2016$TICKER)] <- "HUM"
#PRC
PRC_AVG <- mean(df_Humana_2016$PRC, na.rm = TRUE)
df_Humana_2016$PRC[is.na(df_Humana_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Humana_2016$VOL, na.rm = TRUE)
df_Humana_2016$VOL[is.na(df_Humana_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Humana_2016$BID, na.rm = TRUE)
df_Humana_2016$BID[is.na(df_Humana_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Humana_2016$ASK, na.rm = TRUE)
df_Humana_2016$ASK[is.na(df_Humana_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Humana_2016$OPENPRC, na.rm = TRUE)
df_Humana_2016$OPENPRC[is.na(df_Humana_2016$OPENPRC)] <- OPEN_AVG
df_Humana_2016
df_Humana_2016$text <- clean_tweets(df_Humana_2016$text)
df_Humana_2016$text <- lemmatize_words(df_Humana_2016$text)
#Remove columns
df_Humana_2018 <- df_Humana_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Humana_2018
#Ticker
df_Humana_2018$TICKER[is.na(df_Humana_2018$TICKER)] <- "HUM"
#PRC
PRC_AVG <- mean(df_Humana_2018$PRC, na.rm = TRUE)
df_Humana_2018$PRC[is.na(df_Humana_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Humana_2018$VOL, na.rm = TRUE)
df_Humana_2018$VOL[is.na(df_Humana_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Humana_2018$BID, na.rm = TRUE)
df_Humana_2018$BID[is.na(df_Humana_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Humana_2018$ASK, na.rm = TRUE)
df_Humana_2018$ASK[is.na(df_Humana_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Humana_2018$OPENPRC, na.rm = TRUE)
df_Humana_2018$OPENPRC[is.na(df_Humana_2018$OPENPRC)] <- OPEN_AVG
df_Humana_2018
df_Humana_2018$text <- clean_tweets(df_Humana_2018$text)
df_Humana_2018$text <- lemmatize_words(df_Humana_2018$text)
#CB Autodesk
#Remove columns
df_CB_autodesk_2016 <- df_CB_autodesk_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_CB_autodesk_2016
#Ticker
df_CB_autodesk_2016$TICKER[is.na(df_CB_autodesk_2016$TICKER)] <- "ADSK"
#PRC
PRC_AVG <- mean(df_CB_autodesk_2016$PRC, na.rm = TRUE)
df_CB_autodesk_2016$PRC[is.na(df_CB_autodesk_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_CB_autodesk_2016$VOL, na.rm = TRUE)
df_CB_autodesk_2016$VOL[is.na(df_CB_autodesk_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_CB_autodesk_2016$BID, na.rm = TRUE)
df_CB_autodesk_2016$BID[is.na(df_CB_autodesk_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_CB_autodesk_2016$ASK, na.rm = TRUE)
df_CB_autodesk_2016$ASK[is.na(df_CB_autodesk_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_CB_autodesk_2016$OPENPRC, na.rm = TRUE)
df_CB_autodesk_2016$OPENPRC[is.na(df_CB_autodesk_2016$OPENPRC)] <- OPEN_AVG
df_CB_autodesk_2016
df_CB_autodesk_2016$text <- clean_tweets(df_CB_autodesk_2016$text)
df_CB_autodesk_2016$text <- lemmatize_words(df_CB_autodesk_2016$text)
#Remove columns
df_CB_autodesk_2018 <- df_CB_autodesk_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_CB_autodesk_2018
#Ticker
df_CB_autodesk_2018$TICKER[is.na(df_CB_autodesk_2018$TICKER)] <- "ADSK"
#PRC
PRC_AVG <- mean(df_CB_autodesk_2018$PRC, na.rm = TRUE)
df_CB_autodesk_2018$PRC[is.na(df_CB_autodesk_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_CB_autodesk_2018$VOL, na.rm = TRUE)
df_CB_autodesk_2018$VOL[is.na(df_CB_autodesk_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_CB_autodesk_2018$BID, na.rm = TRUE)
df_CB_autodesk_2018$BID[is.na(df_CB_autodesk_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_CB_autodesk_2018$ASK, na.rm = TRUE)
df_CB_autodesk_2018$ASK[is.na(df_CB_autodesk_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_CB_autodesk_2018$OPENPRC, na.rm = TRUE)
df_CB_autodesk_2018$OPENPRC[is.na(df_CB_autodesk_2018$OPENPRC)] <- OPEN_AVG
df_CB_autodesk_2018
df_CB_autodesk_2018$text <- clean_tweets(df_CB_autodesk_2018$text)
df_CB_autodesk_2018$text <- lemmatize_words(df_CB_autodesk_2018$text)
#Equinox
#Remove columns
df_equinox_2018 <- df_equinox_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_equinox_2018
#Ticker
df_equinox_2018$TICKER[is.na(df_equinox_2018$TICKER)] <- "EQIX"
#PRC
PRC_AVG <- mean(df_equinox_2018$PRC, na.rm = TRUE)
df_equinox_2018$PRC[is.na(df_equinox_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_equinox_2018$VOL, na.rm = TRUE)
df_equinox_2018$VOL[is.na(df_equinox_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_equinox_2018$BID, na.rm = TRUE)
df_equinox_2018$BID[is.na(df_equinox_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_equinox_2018$ASK, na.rm = TRUE)
df_equinox_2018$ASK[is.na(df_equinox_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_equinox_2018$OPENPRC, na.rm = TRUE)
df_equinox_2018$OPENPRC[is.na(df_equinox_2018$OPENPRC)] <- OPEN_AVG
df_equinox_2018
df_equinox_2018$text <- clean_tweets(df_equinox_2018$text)
df_equinox_2018$text <- lemmatize_words(df_equinox_2018$text)
#Cisco
#Remove columns
df_cisco_2016 <- df_cisco_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_cisco_2016
#Ticker
df_cisco_2016$TICKER[is.na(df_cisco_2016$TICKER)] <- "CSCO"
#PRC
PRC_AVG <- mean(df_cisco_2016$PRC, na.rm = TRUE)
df_cisco_2016$PRC[is.na(df_cisco_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_cisco_2016$VOL, na.rm = TRUE)
df_cisco_2016$VOL[is.na(df_cisco_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_cisco_2016$BID, na.rm = TRUE)
df_cisco_2016$BID[is.na(df_cisco_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_cisco_2016$ASK, na.rm = TRUE)
df_cisco_2016$ASK[is.na(df_cisco_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_cisco_2016$OPENPRC, na.rm = TRUE)
df_cisco_2016$OPENPRC[is.na(df_cisco_2016$OPENPRC)] <- OPEN_AVG
df_cisco_2016
df_cisco_2016$text <- clean_tweets(df_cisco_2016$text)
df_cisco_2016$text <- lemmatize_words(df_cisco_2016$text)
#Remove columns
df_cisco_2018 <- df_cisco_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_cisco_2018
#Ticker
df_cisco_2018$TICKER[is.na(df_cisco_2018$TICKER)] <- "CSCO"
#PRC
PRC_AVG <- mean(df_cisco_2018$PRC, na.rm = TRUE)
df_cisco_2018$PRC[is.na(df_cisco_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_cisco_2018$VOL, na.rm = TRUE)
df_cisco_2018$VOL[is.na(df_cisco_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_cisco_2018$BID, na.rm = TRUE)
df_cisco_2018$BID[is.na(df_cisco_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_cisco_2018$ASK, na.rm = TRUE)
df_cisco_2018$ASK[is.na(df_cisco_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_cisco_2018$OPENPRC, na.rm = TRUE)
df_cisco_2018$OPENPRC[is.na(df_cisco_2018$OPENPRC)] <- OPEN_AVG
df_cisco_2018
df_cisco_2018$text <- clean_tweets(df_cisco_2018$text)
df_cisco_2018$text <- lemmatize_words(df_cisco_2018$text)
#EBAY
#Remove columns
df_EBAY_2016 <- df_EBAY_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_EBAY_2016
#Ticker
df_EBAY_2016$TICKER[is.na(df_EBAY_2016$TICKER)] <- "EBAY"
#PRC
PRC_AVG <- mean(df_EBAY_2016$PRC, na.rm = TRUE)
df_EBAY_2016$PRC[is.na(df_EBAY_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_EBAY_2016$VOL, na.rm = TRUE)
df_EBAY_2016$VOL[is.na(df_EBAY_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_EBAY_2016$BID, na.rm = TRUE)
df_EBAY_2016$BID[is.na(df_EBAY_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_EBAY_2016$ASK, na.rm = TRUE)
df_EBAY_2016$ASK[is.na(df_EBAY_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_EBAY_2016$OPENPRC, na.rm = TRUE)
df_EBAY_2016$OPENPRC[is.na(df_EBAY_2016$OPENPRC)] <- OPEN_AVG
df_EBAY_2016
df_EBAY_2016$text <- clean_tweets(df_EBAY_2016$text)
df_EBAY_2016$text <- lemmatize_words(df_EBAY_2016$text)
#Remove columns
df_EBAY_2018 <- df_EBAY_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_EBAY_2018
#Ticker
df_EBAY_2018$TICKER[is.na(df_EBAY_2018$TICKER)] <- "EBAY"
#PRC
PRC_AVG <- mean(df_EBAY_2018$PRC, na.rm = TRUE)
df_EBAY_2018$PRC[is.na(df_EBAY_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_EBAY_2018$VOL, na.rm = TRUE)
df_EBAY_2018$VOL[is.na(df_EBAY_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_EBAY_2018$BID, na.rm = TRUE)
df_EBAY_2018$BID[is.na(df_EBAY_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_EBAY_2018$ASK, na.rm = TRUE)
df_EBAY_2018$ASK[is.na(df_EBAY_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_EBAY_2018$OPENPRC, na.rm = TRUE)
df_EBAY_2018$OPENPRC[is.na(df_EBAY_2018$OPENPRC)] <- OPEN_AVG
df_EBAY_2018
df_EBAY_2018$text <- clean_tweets(df_EBAY_2018$text)
df_EBAY_2018$text <- lemmatize_words(df_EBAY_2018$text)
#Davita
#Remove columns
df_Davita_2016 <- df_Davita_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Davita_2016
#Ticker
df_Davita_2016$TICKER[is.na(df_Davita_2016$TICKER)] <- "DVA"
#PRC
PRC_AVG <- mean(df_Davita_2016$PRC, na.rm = TRUE)
df_Davita_2016$PRC[is.na(df_Davita_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Davita_2016$VOL, na.rm = TRUE)
df_Davita_2016$VOL[is.na(df_Davita_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Davita_2016$BID, na.rm = TRUE)
df_Davita_2016$BID[is.na(df_Davita_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Davita_2016$ASK, na.rm = TRUE)
df_Davita_2016$ASK[is.na(df_Davita_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Davita_2016$OPENPRC, na.rm = TRUE)
df_Davita_2016$OPENPRC[is.na(df_Davita_2016$OPENPRC)] <- OPEN_AVG
df_Davita_2016
df_Davita_2016$text <- clean_tweets(df_Davita_2016$text)
df_Davita_2016$text <- lemmatize_words(df_Davita_2016$text)
#Remove columns
df_Davita_2017 <- df_Davita_2017[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Davita_2017
#Ticker
df_Davita_2017$TICKER[is.na(df_Davita_2017$TICKER)] <- "DVA"
#PRC
PRC_AVG <- mean(df_Davita_2017$PRC, na.rm = TRUE)
df_Davita_2017$PRC[is.na(df_Davita_2017$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Davita_2017$VOL, na.rm = TRUE)
df_Davita_2017$VOL[is.na(df_Davita_2017$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Davita_2017$BID, na.rm = TRUE)
df_Davita_2017$BID[is.na(df_Davita_2017$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Davita_2017$ASK, na.rm = TRUE)
df_Davita_2017$ASK[is.na(df_Davita_2017$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Davita_2017$OPENPRC, na.rm = TRUE)
df_Davita_2017$OPENPRC[is.na(df_Davita_2017$OPENPRC)] <- OPEN_AVG
df_Davita_2017
df_Davita_2017$text <- clean_tweets(df_Davita_2017$text)
df_Davita_2017$text <- lemmatize_words(df_Davita_2017$text)
#Illumina
#Remove columns
df_Illumina_2016 <- df_Illumina_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Illumina_2016
#Ticker
df_Illumina_2016$TICKER[is.na(df_Illumina_2016$TICKER)] <- "ILMN"
#PRC
PRC_AVG <- mean(df_Illumina_2016$PRC, na.rm = TRUE)
df_Illumina_2016$PRC[is.na(df_Illumina_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Illumina_2016$VOL, na.rm = TRUE)
df_Illumina_2016$VOL[is.na(df_Illumina_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Illumina_2016$BID, na.rm = TRUE)
df_Illumina_2016$BID[is.na(df_Illumina_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Illumina_2016$ASK, na.rm = TRUE)
df_Illumina_2016$ASK[is.na(df_Illumina_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Illumina_2016$OPENPRC, na.rm = TRUE)
df_Illumina_2016$OPENPRC[is.na(df_Illumina_2016$OPENPRC)] <- OPEN_AVG
df_Illumina_2016
df_Illumina_2016$text <- clean_tweets(df_Illumina_2016$text)
df_Illumina_2016$text <- lemmatize_words(df_Illumina_2016$text)
#Remove columns
df_Illumina_2018 <- df_Illumina_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Illumina_2018
#Ticker
df_Illumina_2018$TICKER[is.na(df_Illumina_2018$TICKER)] <- "ILMN"
#PRC
PRC_AVG <- mean(df_Illumina_2018$PRC, na.rm = TRUE)
df_Illumina_2018$PRC[is.na(df_Illumina_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Illumina_2018$VOL, na.rm = TRUE)
df_Illumina_2018$VOL[is.na(df_Illumina_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Illumina_2018$BID, na.rm = TRUE)
df_Illumina_2018$BID[is.na(df_Illumina_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Illumina_2018$ASK, na.rm = TRUE)
df_Illumina_2018$ASK[is.na(df_Illumina_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Illumina_2018$OPENPRC, na.rm = TRUE)
df_Illumina_2018$OPENPRC[is.na(df_Illumina_2018$OPENPRC)] <- OPEN_AVG
df_Illumina_2018
df_Illumina_2018$text <- clean_tweets(df_Illumina_2018$text)
df_Illumina_2018$text <- lemmatize_words(df_Illumina_2018$text)
#Homedepot
#Remove columns
df_Homedepot_2013 <- df_Homedepot_2013[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Homedepot_2013
#Ticker
df_Homedepot_2013$TICKER[is.na(df_Homedepot_2013$TICKER)] <- "HD"
#PRC
PRC_AVG <- mean(df_Homedepot_2013$PRC, na.rm = TRUE)
df_Homedepot_2013$PRC[is.na(df_Homedepot_2013$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Homedepot_2013$VOL, na.rm = TRUE)
df_Homedepot_2013$VOL[is.na(df_Homedepot_2013$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Homedepot_2013$BID, na.rm = TRUE)
df_Homedepot_2013$BID[is.na(df_Homedepot_2013$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Homedepot_2013$ASK, na.rm = TRUE)
df_Homedepot_2013$ASK[is.na(df_Homedepot_2013$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Homedepot_2013$OPENPRC, na.rm = TRUE)
df_Homedepot_2013$OPENPRC[is.na(df_Homedepot_2013$OPENPRC)] <- OPEN_AVG
df_Homedepot_2013
df_Homedepot_2013$text <- clean_tweets(df_Homedepot_2013$text)
df_Homedepot_2013$text <- lemmatize_words(df_Homedepot_2013$text)
#Southwest Airlines
#Remove columns
df_Southwest_2016 <- df_Southwest_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Southwest_2016
#Ticker
df_Southwest_2016$TICKER[is.na(df_Southwest_2016$TICKER)] <- "LUV"
#PRC
PRC_AVG <- mean(df_Southwest_2016$PRC, na.rm = TRUE)
df_Southwest_2016$PRC[is.na(df_Southwest_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Southwest_2016$VOL, na.rm = TRUE)
df_Southwest_2016$VOL[is.na(df_Southwest_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Southwest_2016$BID, na.rm = TRUE)
df_Southwest_2016$BID[is.na(df_Southwest_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Southwest_2016$ASK, na.rm = TRUE)
df_Southwest_2016$ASK[is.na(df_Southwest_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Southwest_2016$OPENPRC, na.rm = TRUE)
df_Southwest_2016$OPENPRC[is.na(df_Southwest_2016$OPENPRC)] <- OPEN_AVG
df_Southwest_2016
df_Southwest_2016$text <- clean_tweets(df_Southwest_2016$text)
df_Southwest_2016$text <- lemmatize_words(df_Southwest_2016$text)
#Remove columns
df_Southwest_2018 <- df_Southwest_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Southwest_2018
#Ticker
df_Southwest_2018$TICKER[is.na(df_Southwest_2018$TICKER)] <- "LUV"
#PRC
PRC_AVG <- mean(df_Southwest_2018$PRC, na.rm = TRUE)
df_Southwest_2018$PRC[is.na(df_Southwest_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Southwest_2018$VOL, na.rm = TRUE)
df_Southwest_2018$VOL[is.na(df_Southwest_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Southwest_2018$BID, na.rm = TRUE)
df_Southwest_2018$BID[is.na(df_Southwest_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Southwest_2018$ASK, na.rm = TRUE)
df_Southwest_2018$ASK[is.na(df_Southwest_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Southwest_2018$OPENPRC, na.rm = TRUE)
df_Southwest_2018$OPENPRC[is.na(df_Southwest_2018$OPENPRC)] <- OPEN_AVG
df_Southwest_2018
df_Southwest_2018$text <- clean_tweets(df_Southwest_2018$text)
df_Southwest_2018$text <- lemmatize_words(df_Southwest_2018$text)
#FIS
#Remove columns
df_FIS_2016 <- df_FIS_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_FIS_2016
#Ticker
df_FIS_2016$TICKER[is.na(df_FIS_2016$TICKER)] <- "FIS"
#PRC
PRC_AVG <- mean(df_FIS_2016$PRC, na.rm = TRUE)
df_FIS_2016$PRC[is.na(df_FIS_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_FIS_2016$VOL, na.rm = TRUE)
df_FIS_2016$VOL[is.na(df_FIS_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_FIS_2016$BID, na.rm = TRUE)
df_FIS_2016$BID[is.na(df_FIS_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_FIS_2016$ASK, na.rm = TRUE)
df_FIS_2016$ASK[is.na(df_FIS_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_FIS_2016$OPENPRC, na.rm = TRUE)
df_FIS_2016$OPENPRC[is.na(df_FIS_2016$OPENPRC)] <- OPEN_AVG
df_FIS_2016
df_FIS_2016$text <- clean_tweets(df_FIS_2016$text)
df_FIS_2016$text <- lemmatize_words(df_FIS_2016$text)
#Remove columns
df_FIS_2018 <- df_FIS_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_FIS_2018
#Ticker
df_FIS_2018$TICKER[is.na(df_FIS_2018$TICKER)] <- "FIS"
#PRC
PRC_AVG <- mean(df_FIS_2018$PRC, na.rm = TRUE)
df_FIS_2018$PRC[is.na(df_FIS_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_FIS_2018$VOL, na.rm = TRUE)
df_FIS_2018$VOL[is.na(df_FIS_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_FIS_2018$BID, na.rm = TRUE)
df_FIS_2018$BID[is.na(df_FIS_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_FIS_2018$ASK, na.rm = TRUE)
df_FIS_2018$ASK[is.na(df_FIS_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_FIS_2018$OPENPRC, na.rm = TRUE)
df_FIS_2018$OPENPRC[is.na(df_FIS_2018$OPENPRC)] <- OPEN_AVG
df_FIS_2018
df_FIS_2018$text <- clean_tweets(df_FIS_2018$text)
df_FIS_2018$text <- lemmatize_words(df_FIS_2018$text)
#Leucadia nation
#Remove columns
df_Leucadia_2016 <- df_Leucadia_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Leucadia_2016
#Ticker
df_Leucadia_2016$TICKER[is.na(df_Leucadia_2016$TICKER)] <- "LUK"
#PRC
PRC_AVG <- mean(df_Leucadia_2016$PRC, na.rm = TRUE)
df_Leucadia_2016$PRC[is.na(df_Leucadia_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Leucadia_2016$VOL, na.rm = TRUE)
df_Leucadia_2016$VOL[is.na(df_Leucadia_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Leucadia_2016$BID, na.rm = TRUE)
df_Leucadia_2016$BID[is.na(df_Leucadia_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Leucadia_2016$ASK, na.rm = TRUE)
df_Leucadia_2016$ASK[is.na(df_Leucadia_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Leucadia_2016$OPENPRC, na.rm = TRUE)
df_Leucadia_2016$OPENPRC[is.na(df_Leucadia_2016$OPENPRC)] <- OPEN_AVG
df_Leucadia_2016
df_Leucadia_2016$text <- clean_tweets(df_Leucadia_2016$text)
df_Leucadia_2016$text <- lemmatize_words(df_Leucadia_2016$text)
#Remove columns
df_Leucadia_2018 <- df_Leucadia_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Leucadia_2018
#Ticker
df_Leucadia_2018$TICKER[is.na(df_Leucadia_2018$TICKER)] <- "LUK"
#PRC
PRC_AVG <- mean(df_Leucadia_2018$PRC, na.rm = TRUE)
df_Leucadia_2018$PRC[is.na(df_Leucadia_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Leucadia_2018$VOL, na.rm = TRUE)
df_Leucadia_2018$VOL[is.na(df_Leucadia_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Leucadia_2018$BID, na.rm = TRUE)
df_Leucadia_2018$BID[is.na(df_Leucadia_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Leucadia_2018$ASK, na.rm = TRUE)
df_Leucadia_2018$ASK[is.na(df_Leucadia_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Leucadia_2018$OPENPRC, na.rm = TRUE)
df_Leucadia_2018$OPENPRC[is.na(df_Leucadia_2018$OPENPRC)] <- OPEN_AVG
df_Leucadia_2018
df_Leucadia_2018$text <- clean_tweets(df_Leucadia_2018$text)
df_Leucadia_2018$text <- lemmatize_words(df_Leucadia_2018$text)
#Verizon
#Remove columns
df_Verizon_2018 <- df_Verizon_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Verizon_2018
#Ticker
df_Verizon_2018$TICKER[is.na(df_Verizon_2018$TICKER)] <- "VZ"
#PRC
PRC_AVG <- mean(df_Verizon_2018$PRC, na.rm = TRUE)
df_Verizon_2018$PRC[is.na(df_Verizon_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Verizon_2018$VOL, na.rm = TRUE)
df_Verizon_2018$VOL[is.na(df_Verizon_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Verizon_2018$BID, na.rm = TRUE)
df_Verizon_2018$BID[is.na(df_Verizon_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Verizon_2018$ASK, na.rm = TRUE)
df_Verizon_2018$ASK[is.na(df_Verizon_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Verizon_2018$OPENPRC, na.rm = TRUE)
df_Verizon_2018$OPENPRC[is.na(df_Verizon_2018$OPENPRC)] <- OPEN_AVG
df_Verizon_2018
df_Verizon_2018$text <- clean_tweets(df_Verizon_2018$text)
df_Verizon_2018$text <- lemmatize_words(df_Verizon_2018$text)
#Western Union
#Remove columns
df_WU_2016 <- df_WU_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_WU_2016
#Ticker
df_WU_2016$TICKER[is.na(df_WU_2016$TICKER)] <- "WU"
#PRC
PRC_AVG <- mean(df_WU_2016$PRC, na.rm = TRUE)
df_WU_2016$PRC[is.na(df_WU_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_WU_2016$VOL, na.rm = TRUE)
df_WU_2016$VOL[is.na(df_WU_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_WU_2016$BID, na.rm = TRUE)
df_WU_2016$BID[is.na(df_WU_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_WU_2016$ASK, na.rm = TRUE)
df_WU_2016$ASK[is.na(df_WU_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_WU_2016$OPENPRC, na.rm = TRUE)
df_WU_2016$OPENPRC[is.na(df_WU_2016$OPENPRC)] <- OPEN_AVG
df_WU_2016
df_WU_2016$text <- clean_tweets(df_WU_2016$text)
df_WU_2016$text <- lemmatize_words(df_WU_2016$text)
#Remove columns
df_WU_2018 <- df_WU_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_WU_2018
#Ticker
df_WU_2018$TICKER[is.na(df_WU_2018$TICKER)] <- "WU"
#PRC
PRC_AVG <- mean(df_WU_2018$PRC, na.rm = TRUE)
df_WU_2018$PRC[is.na(df_WU_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_WU_2018$VOL, na.rm = TRUE)
df_WU_2018$VOL[is.na(df_WU_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_WU_2018$BID, na.rm = TRUE)
df_WU_2018$BID[is.na(df_WU_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_WU_2018$ASK, na.rm = TRUE)
df_WU_2018$ASK[is.na(df_WU_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_WU_2018$OPENPRC, na.rm = TRUE)
df_WU_2018$OPENPRC[is.na(df_WU_2018$OPENPRC)] <- OPEN_AVG
df_WU_2018
df_WU_2018$text <- clean_tweets(df_WU_2018$text)
df_WU_2018$text <- lemmatize_words(df_WU_2018$text)
#Redhat
#Remove columns
df_RedHat_2016 <- df_RedHat_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_RedHat_2016
#Ticker
df_RedHat_2016$TICKER[is.na(df_RedHat_2016$TICKER)] <- "RHT"
#PRC
PRC_AVG <- mean(df_RedHat_2016$PRC, na.rm = TRUE)
df_RedHat_2016$PRC[is.na(df_RedHat_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_RedHat_2016$VOL, na.rm = TRUE)
df_RedHat_2016$VOL[is.na(df_RedHat_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_RedHat_2016$BID, na.rm = TRUE)
df_RedHat_2016$BID[is.na(df_RedHat_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_RedHat_2016$ASK, na.rm = TRUE)
df_RedHat_2016$ASK[is.na(df_RedHat_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_RedHat_2016$OPENPRC, na.rm = TRUE)
df_RedHat_2016$OPENPRC[is.na(df_RedHat_2016$OPENPRC)] <- OPEN_AVG
df_RedHat_2016
df_RedHat_2016$text <- clean_tweets(df_RedHat_2016$text)
df_RedHat_2016$text <- lemmatize_words(df_RedHat_2016$text)
#Remove columns
df_RedHat_2018 <- df_RedHat_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_RedHat_2018
#Ticker
df_RedHat_2018$TICKER[is.na(df_RedHat_2018$TICKER)] <- "RHT"
#PRC
PRC_AVG <- mean(df_RedHat_2018$PRC, na.rm = TRUE)
df_RedHat_2018$PRC[is.na(df_RedHat_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_RedHat_2018$VOL, na.rm = TRUE)
df_RedHat_2018$VOL[is.na(df_RedHat_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_RedHat_2018$BID, na.rm = TRUE)
df_RedHat_2018$BID[is.na(df_RedHat_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_RedHat_2018$ASK, na.rm = TRUE)
df_RedHat_2018$ASK[is.na(df_RedHat_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_RedHat_2018$OPENPRC, na.rm = TRUE)
df_RedHat_2018$OPENPRC[is.na(df_RedHat_2018$OPENPRC)] <- OPEN_AVG
df_RedHat_2018
df_RedHat_2018$text <- clean_tweets(df_RedHat_2018$text)
df_RedHat_2018$text <- lemmatize_words(df_RedHat_2018$text)
#Amazon
#Remove columns
df_AMZN_2016 <- df_AMZN_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_AMZN_2016
#Ticker
df_AMZN_2016$TICKER[is.na(df_AMZN_2016$TICKER)] <- "AMZN"
#PRC
PRC_AVG <- mean(df_AMZN_2016$PRC, na.rm = TRUE)
df_AMZN_2016$PRC[is.na(df_AMZN_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_AMZN_2016$VOL, na.rm = TRUE)
df_AMZN_2016$VOL[is.na(df_AMZN_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_AMZN_2016$BID, na.rm = TRUE)
df_AMZN_2016$BID[is.na(df_AMZN_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_AMZN_2016$ASK, na.rm = TRUE)
df_AMZN_2016$ASK[is.na(df_AMZN_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_AMZN_2016$OPENPRC, na.rm = TRUE)
df_AMZN_2016$OPENPRC[is.na(df_AMZN_2016$OPENPRC)] <- OPEN_AVG
df_AMZN_2016
df_AMZN_2016$text <- clean_tweets(df_AMZN_2016$text)
df_AMZN_2016$text <- lemmatize_words(df_AMZN_2016$text)
#Remove columns
df_AMZN_2018 <- df_AMZN_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_AMZN_2018
#Ticker
df_AMZN_2018$TICKER[is.na(df_AMZN_2018$TICKER)] <- "AMZN"
#PRC
PRC_AVG <- mean(df_AMZN_2018$PRC, na.rm = TRUE)
df_AMZN_2018$PRC[is.na(df_AMZN_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_AMZN_2018$VOL, na.rm = TRUE)
df_AMZN_2018$VOL[is.na(df_AMZN_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_AMZN_2018$BID, na.rm = TRUE)
df_AMZN_2018$BID[is.na(df_AMZN_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_AMZN_2018$ASK, na.rm = TRUE)
df_AMZN_2018$ASK[is.na(df_AMZN_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_AMZN_2018$OPENPRC, na.rm = TRUE)
df_AMZN_2018$OPENPRC[is.na(df_AMZN_2018$OPENPRC)] <- OPEN_AVG
df_AMZN_2018
df_AMZN_2018$text <- clean_tweets(df_AMZN_2018$text)
df_AMZN_2018$text <- lemmatize_words(df_AMZN_2018$text)
#GE
#Remove columns
df_GE_2016 <- df_GE_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_GE_2016
#Ticker
df_GE_2016$TICKER[is.na(df_GE_2016$TICKER)] <- "GE"
#PRC
PRC_AVG <- mean(df_GE_2016$PRC, na.rm = TRUE)
df_GE_2016$PRC[is.na(df_GE_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_GE_2016$VOL, na.rm = TRUE)
df_GE_2016$VOL[is.na(df_GE_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_GE_2016$BID, na.rm = TRUE)
df_GE_2016$BID[is.na(df_GE_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_GE_2016$ASK, na.rm = TRUE)
df_GE_2016$ASK[is.na(df_GE_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_GE_2016$OPENPRC, na.rm = TRUE)
df_GE_2016$OPENPRC[is.na(df_GE_2016$OPENPRC)] <- OPEN_AVG
df_GE_2016
df_GE_2016$text <- clean_tweets(df_GE_2016$text)
df_GE_2016$text <- lemmatize_words(df_GE_2016$text)
#Remove columns
df_GE_2017 <- df_GE_2017[,-c(6,8,9,10,15,17,18,19,20,21)]
df_GE_2017
#Ticker
df_GE_2017$TICKER[is.na(df_GE_2017$TICKER)] <- "GE"
#PRC
PRC_AVG <- mean(df_GE_2017$PRC, na.rm = TRUE)
df_GE_2017$PRC[is.na(df_GE_2017$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_GE_2017$VOL, na.rm = TRUE)
df_GE_2017$VOL[is.na(df_GE_2017$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_GE_2017$BID, na.rm = TRUE)
df_GE_2017$BID[is.na(df_GE_2017$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_GE_2017$ASK, na.rm = TRUE)
df_GE_2017$ASK[is.na(df_GE_2017$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_GE_2017$OPENPRC, na.rm = TRUE)
df_GE_2017$OPENPRC[is.na(df_GE_2017$OPENPRC)] <- OPEN_AVG
df_GE_2017
df_GE_2017$text <- clean_tweets(df_GE_2017$text)
df_GE_2017$text <- lemmatize_words(df_GE_2017$text)
#Fiserv
#Remove columns
df_Fiserv_2016 <- df_Fiserv_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Fiserv_2016
#Ticker
df_Fiserv_2016$TICKER[is.na(df_Fiserv_2016$TICKER)] <- "FISV"
#PRC
PRC_AVG <- mean(df_Fiserv_2016$PRC, na.rm = TRUE)
df_Fiserv_2016$PRC[is.na(df_Fiserv_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Fiserv_2016$VOL, na.rm = TRUE)
df_Fiserv_2016$VOL[is.na(df_Fiserv_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Fiserv_2016$BID, na.rm = TRUE)
df_Fiserv_2016$BID[is.na(df_Fiserv_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Fiserv_2016$ASK, na.rm = TRUE)
df_Fiserv_2016$ASK[is.na(df_Fiserv_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Fiserv_2016$OPENPRC, na.rm = TRUE)
df_Fiserv_2016$OPENPRC[is.na(df_Fiserv_2016$OPENPRC)] <- OPEN_AVG
df_Fiserv_2016
df_Fiserv_2016$text <- clean_tweets(df_Fiserv_2016$text)
df_Fiserv_2016$text <- lemmatize_words(df_Fiserv_2016$text)
#Fiserv
#Remove columns
df_Fiserv_2018 <- df_Fiserv_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Fiserv_2018
#Ticker
df_Fiserv_2018$TICKER[is.na(df_Fiserv_2018$TICKER)] <- "FISV"
#PRC
PRC_AVG <- mean(df_Fiserv_2018$PRC, na.rm = TRUE)
df_Fiserv_2018$PRC[is.na(df_Fiserv_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Fiserv_2018$VOL, na.rm = TRUE)
df_Fiserv_2018$VOL[is.na(df_Fiserv_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Fiserv_2018$BID, na.rm = TRUE)
df_Fiserv_2018$BID[is.na(df_Fiserv_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Fiserv_2018$ASK, na.rm = TRUE)
df_Fiserv_2018$ASK[is.na(df_Fiserv_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Fiserv_2018$OPENPRC, na.rm = TRUE)
df_Fiserv_2018$OPENPRC[is.na(df_Fiserv_2018$OPENPRC)] <- OPEN_AVG
df_Fiserv_2018
df_Fiserv_2018$text <- clean_tweets(df_Fiserv_2018$text)
df_Fiserv_2018$text <- lemmatize_words(df_Fiserv_2018$text)
#Waste Management
#Remove columns
df_WM_2018 <- df_WM_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_WM_2018
#Ticker
df_WM_2018$TICKER[is.na(df_WM_2018$TICKER)] <- "WM"
#PRC
PRC_AVG <- mean(df_WM_2018$PRC, na.rm = TRUE)
df_WM_2018$PRC[is.na(df_WM_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_WM_2018$VOL, na.rm = TRUE)
df_WM_2018$VOL[is.na(df_WM_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_WM_2018$BID, na.rm = TRUE)
df_WM_2018$BID[is.na(df_WM_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_WM_2018$ASK, na.rm = TRUE)
df_WM_2018$ASK[is.na(df_WM_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_WM_2018$OPENPRC, na.rm = TRUE)
df_WM_2018$OPENPRC[is.na(df_WM_2018$OPENPRC)] <- OPEN_AVG
df_WM_2018
df_WM_2018$text <- clean_tweets(df_WM_2018$text)
df_WM_2018$text <- lemmatize_words(df_WM_2018$text)
#WillsTower
#Remove columns
df_Wills_2016 <- df_Wills_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Wills_2016
#Ticker
df_Wills_2016$TICKER[is.na(df_Wills_2016$TICKER)] <- "WLTW"
#PRC
PRC_AVG <- mean(df_Wills_2016$PRC, na.rm = TRUE)
df_Wills_2016$PRC[is.na(df_Wills_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Wills_2016$VOL, na.rm = TRUE)
df_Wills_2016$VOL[is.na(df_Wills_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Wills_2016$BID, na.rm = TRUE)
df_Wills_2016$BID[is.na(df_Wills_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Wills_2016$ASK, na.rm = TRUE)
df_Wills_2016$ASK[is.na(df_Wills_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Wills_2016$OPENPRC, na.rm = TRUE)
df_Wills_2016$OPENPRC[is.na(df_Wills_2016$OPENPRC)] <- OPEN_AVG
df_Wills_2016
df_Wills_2016$text <- clean_tweets(df_Wills_2016$text)
df_Wills_2016$text <- lemmatize_words(df_Wills_2016$text)
#Remove columns
df_Wills_2018 <- df_Wills_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Wills_2018
#Ticker
df_Wills_2018$TICKER[is.na(df_Wills_2018$TICKER)] <- "WLTW"
#PRC
PRC_AVG <- mean(df_Wills_2018$PRC, na.rm = TRUE)
df_Wills_2018$PRC[is.na(df_Wills_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Wills_2018$VOL, na.rm = TRUE)
df_Wills_2018$VOL[is.na(df_Wills_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Wills_2018$BID, na.rm = TRUE)
df_Wills_2018$BID[is.na(df_Wills_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Wills_2018$ASK, na.rm = TRUE)
df_Wills_2018$ASK[is.na(df_Wills_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Wills_2018$OPENPRC, na.rm = TRUE)
df_Wills_2018$OPENPRC[is.na(df_Wills_2018$OPENPRC)] <- OPEN_AVG
df_Wills_2018
df_Wills_2018$text <- clean_tweets(df_Wills_2018$text)
df_Wills_2018$text <- lemmatize_words(df_Wills_2018$text)
#Tripadvisor
#Remove columns
df_tripadvisor_2016 <- df_tripadvisor_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_tripadvisor_2016
#Ticker
df_tripadvisor_2016$TICKER[is.na(df_tripadvisor_2016$TICKER)] <- "TRIP"
#PRC
PRC_AVG <- mean(df_tripadvisor_2016$PRC, na.rm = TRUE)
df_tripadvisor_2016$PRC[is.na(df_tripadvisor_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_tripadvisor_2016$VOL, na.rm = TRUE)
df_tripadvisor_2016$VOL[is.na(df_tripadvisor_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_tripadvisor_2016$BID, na.rm = TRUE)
df_tripadvisor_2016$BID[is.na(df_tripadvisor_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_tripadvisor_2016$ASK, na.rm = TRUE)
df_tripadvisor_2016$ASK[is.na(df_tripadvisor_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_tripadvisor_2016$OPENPRC, na.rm = TRUE)
df_tripadvisor_2016$OPENPRC[is.na(df_tripadvisor_2016$OPENPRC)] <- OPEN_AVG
df_tripadvisor_2016
df_tripadvisor_2016$text <- clean_tweets(df_tripadvisor_2016$text)
df_tripadvisor_2016$text <- lemmatize_words(df_tripadvisor_2016$text)
#Remove columns
df_tripadvisor_2018 <- df_tripadvisor_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_tripadvisor_2018
#Ticker
df_tripadvisor_2018$TICKER[is.na(df_tripadvisor_2018$TICKER)] <- "TRIP"
#PRC
PRC_AVG <- mean(df_tripadvisor_2018$PRC, na.rm = TRUE)
df_tripadvisor_2018$PRC[is.na(df_tripadvisor_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_tripadvisor_2018$VOL, na.rm = TRUE)
df_tripadvisor_2018$VOL[is.na(df_tripadvisor_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_tripadvisor_2018$BID, na.rm = TRUE)
df_tripadvisor_2018$BID[is.na(df_tripadvisor_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_tripadvisor_2018$ASK, na.rm = TRUE)
df_tripadvisor_2018$ASK[is.na(df_tripadvisor_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_tripadvisor_2018$OPENPRC, na.rm = TRUE)
df_tripadvisor_2018$OPENPRC[is.na(df_tripadvisor_2018$OPENPRC)] <- OPEN_AVG
df_tripadvisor_2018
df_tripadvisor_2018$text <- clean_tweets(df_tripadvisor_2018$text)
df_tripadvisor_2018$text <- lemmatize_words(df_tripadvisor_2018$text)
#DavitaKent
#Remove columns
df_DavitaK_2016 <- df_DavitaK_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_DavitaK_2016
#Ticker
df_DavitaK_2016$TICKER[is.na(df_DavitaK_2016$TICKER)] <- "DVA"
#PRC
PRC_AVG <- mean(df_DavitaK_2016$PRC, na.rm = TRUE)
df_DavitaK_2016$PRC[is.na(df_DavitaK_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_DavitaK_2016$VOL, na.rm = TRUE)
df_DavitaK_2016$VOL[is.na(df_DavitaK_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_DavitaK_2016$BID, na.rm = TRUE)
df_DavitaK_2016$BID[is.na(df_DavitaK_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_DavitaK_2016$ASK, na.rm = TRUE)
df_DavitaK_2016$ASK[is.na(df_DavitaK_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_DavitaK_2016$OPENPRC, na.rm = TRUE)
df_DavitaK_2016$OPENPRC[is.na(df_DavitaK_2016$OPENPRC)] <- OPEN_AVG
df_DavitaK_2016
df_DavitaK_2016$text <- clean_tweets(df_DavitaK_2016$text)
df_DavitaK_2016$text <- lemmatize_words(df_DavitaK_2016$text)
#Remove columns
df_DavitaK_2018 <- df_DavitaK_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_DavitaK_2018
#Ticker
df_DavitaK_2018$TICKER[is.na(df_DavitaK_2018$TICKER)] <- "DVA"
#PRC
PRC_AVG <- mean(df_DavitaK_2018$PRC, na.rm = TRUE)
df_DavitaK_2018$PRC[is.na(df_DavitaK_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_DavitaK_2018$VOL, na.rm = TRUE)
df_DavitaK_2018$VOL[is.na(df_DavitaK_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_DavitaK_2018$BID, na.rm = TRUE)
df_DavitaK_2018$BID[is.na(df_DavitaK_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_DavitaK_2018$ASK, na.rm = TRUE)
df_DavitaK_2018$ASK[is.na(df_DavitaK_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_DavitaK_2018$OPENPRC, na.rm = TRUE)
df_DavitaK_2018$OPENPRC[is.na(df_DavitaK_2018$OPENPRC)] <- OPEN_AVG
df_DavitaK_2018
df_DavitaK_2018$text <- clean_tweets(df_DavitaK_2018$text)
df_DavitaK_2018$text <- lemmatize_words(df_DavitaK_2018$text)
#Starbucks
#Remove columns
df_Starbucks_2018 <- df_Starbucks_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Starbucks_2018
#Ticker
df_Starbucks_2018$TICKER[is.na(df_Starbucks_2018$TICKER)] <- "SBUX"
#PRC
PRC_AVG <- mean(df_Starbucks_2018$PRC, na.rm = TRUE)
df_Starbucks_2018$PRC[is.na(df_Starbucks_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Starbucks_2018$VOL, na.rm = TRUE)
df_Starbucks_2018$VOL[is.na(df_Starbucks_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Starbucks_2018$BID, na.rm = TRUE)
df_Starbucks_2018$BID[is.na(df_Starbucks_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Starbucks_2018$ASK, na.rm = TRUE)
df_Starbucks_2018$ASK[is.na(df_Starbucks_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Starbucks_2018$OPENPRC, na.rm = TRUE)
df_Starbucks_2018$OPENPRC[is.na(df_Starbucks_2018$OPENPRC)] <- OPEN_AVG
df_Starbucks_2018
df_Starbucks_2018$text <- clean_tweets(df_Starbucks_2018$text)
df_Starbucks_2018$text <- lemmatize_words(df_Starbucks_2018$text)
#McCormick
#Remove columns
df_McCormick_2018 <- df_McCormick_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_McCormick_2018
#Ticker
df_McCormick_2018$TICKER[is.na(df_McCormick_2018$TICKER)] <- "MKC"
#PRC
PRC_AVG <- mean(df_McCormick_2018$PRC, na.rm = TRUE)
df_McCormick_2018$PRC[is.na(df_McCormick_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_McCormick_2018$VOL, na.rm = TRUE)
df_McCormick_2018$VOL[is.na(df_McCormick_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_McCormick_2018$BID, na.rm = TRUE)
df_McCormick_2018$BID[is.na(df_McCormick_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_McCormick_2018$ASK, na.rm = TRUE)
df_McCormick_2018$ASK[is.na(df_McCormick_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_McCormick_2018$OPENPRC, na.rm = TRUE)
df_McCormick_2018$OPENPRC[is.na(df_McCormick_2018$OPENPRC)] <- OPEN_AVG
df_McCormick_2018
df_McCormick_2018$text <- clean_tweets(df_McCormick_2018$text)
df_McCormick_2018$text <- lemmatize_words(df_McCormick_2018$text)
#IHS Markit
#Remove columns
df_IHS_2018 <- df_IHS_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_IHS_2018
#Ticker
df_IHS_2018$TICKER[is.na(df_IHS_2018$TICKER)] <- "TCX"
#PRC
PRC_AVG <- mean(df_IHS_2018$PRC, na.rm = TRUE)
df_IHS_2018$PRC[is.na(df_IHS_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_IHS_2018$VOL, na.rm = TRUE)
df_IHS_2018$VOL[is.na(df_IHS_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_IHS_2018$BID, na.rm = TRUE)
df_IHS_2018$BID[is.na(df_IHS_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_IHS_2018$ASK, na.rm = TRUE)
df_IHS_2018$ASK[is.na(df_IHS_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_IHS_2018$OPENPRC, na.rm = TRUE)
df_IHS_2018$OPENPRC[is.na(df_IHS_2018$OPENPRC)] <- OPEN_AVG
df_IHS_2018
df_IHS_2018$text <- clean_tweets(df_IHS_2018$text)
df_IHS_2018$text <- lemmatize_words(df_IHS_2018$text)
#AMD
#Remove columns
df_AMD_2018 <- df_AMD_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_AMD_2018
#Ticker
df_AMD_2018$TICKER[is.na(df_AMD_2018$TICKER)] <- "AMD"
#PRC
PRC_AVG <- mean(df_AMD_2018$PRC, na.rm = TRUE)
df_AMD_2018$PRC[is.na(df_AMD_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_AMD_2018$VOL, na.rm = TRUE)
df_AMD_2018$VOL[is.na(df_AMD_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_AMD_2018$BID, na.rm = TRUE)
df_AMD_2018$BID[is.na(df_AMD_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_AMD_2018$ASK, na.rm = TRUE)
df_AMD_2018$ASK[is.na(df_AMD_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_AMD_2018$OPENPRC, na.rm = TRUE)
df_AMD_2018$OPENPRC[is.na(df_AMD_2018$OPENPRC)] <- OPEN_AVG
df_AMD_2018
df_AMD_2018$text <- clean_tweets(df_AMD_2018$text)
df_AMD_2018$text <- lemmatize_words(df_AMD_2018$text)
#ResMed
#Remove columns
df_ResMed_2016 <- df_ResMed_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_ResMed_2016
#Ticker
df_ResMed_2016$TICKER[is.na(df_ResMed_2016$TICKER)] <- "RMD"
#PRC
PRC_AVG <- mean(df_ResMed_2016$PRC, na.rm = TRUE)
df_ResMed_2016$PRC[is.na(df_ResMed_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_ResMed_2016$VOL, na.rm = TRUE)
df_ResMed_2016$VOL[is.na(df_ResMed_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_ResMed_2016$BID, na.rm = TRUE)
df_ResMed_2016$BID[is.na(df_ResMed_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_ResMed_2016$ASK, na.rm = TRUE)
df_ResMed_2016$ASK[is.na(df_ResMed_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_ResMed_2016$OPENPRC, na.rm = TRUE)
df_ResMed_2016$OPENPRC[is.na(df_ResMed_2016$OPENPRC)] <- OPEN_AVG
df_ResMed_2016
df_ResMed_2016$text <- clean_tweets(df_ResMed_2016$text)
df_ResMed_2016$text <- lemmatize_words(df_ResMed_2016$text)
#Remove columns
df_ResMed_2018 <- df_ResMed_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_ResMed_2018
#Ticker
df_ResMed_2018$TICKER[is.na(df_ResMed_2018$TICKER)] <- "RMD"
#PRC
PRC_AVG <- mean(df_ResMed_2018$PRC, na.rm = TRUE)
df_ResMed_2018$PRC[is.na(df_ResMed_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_ResMed_2018$VOL, na.rm = TRUE)
df_ResMed_2018$VOL[is.na(df_ResMed_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_ResMed_2018$BID, na.rm = TRUE)
df_ResMed_2018$BID[is.na(df_ResMed_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_ResMed_2018$ASK, na.rm = TRUE)
df_ResMed_2018$ASK[is.na(df_ResMed_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_ResMed_2018$OPENPRC, na.rm = TRUE)
df_ResMed_2018$OPENPRC[is.na(df_ResMed_2018$OPENPRC)] <- OPEN_AVG
df_ResMed_2018
df_ResMed_2018$text <- clean_tweets(df_ResMed_2018$text)
df_ResMed_2018$text <- lemmatize_words(df_ResMed_2018$text)
#CA
#Remove columns
df_CA_2016 <- df_CA_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_CA_2016
#Ticker
df_CA_2016$TICKER[is.na(df_CA_2016$TICKER)] <- "CA"
#PRC
PRC_AVG <- mean(df_CA_2016$PRC, na.rm = TRUE)
df_CA_2016$PRC[is.na(df_CA_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_CA_2016$VOL, na.rm = TRUE)
df_CA_2016$VOL[is.na(df_CA_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_CA_2016$BID, na.rm = TRUE)
df_CA_2016$BID[is.na(df_CA_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_CA_2016$ASK, na.rm = TRUE)
df_CA_2016$ASK[is.na(df_CA_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_CA_2016$OPENPRC, na.rm = TRUE)
df_CA_2016$OPENPRC[is.na(df_CA_2016$OPENPRC)] <- OPEN_AVG
df_CA_2016
df_CA_2016$text <- clean_tweets(df_CA_2016$text)
df_CA_2016$text <- lemmatize_words(df_CA_2016$text)
#Remove columns
df_CA_2018 <- df_CA_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_CA_2018
#Ticker
df_CA_2018$TICKER[is.na(df_CA_2018$TICKER)] <- "CA"
#PRC
PRC_AVG <- mean(df_CA_2018$PRC, na.rm = TRUE)
df_CA_2018$PRC[is.na(df_CA_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_CA_2018$VOL, na.rm = TRUE)
df_CA_2018$VOL[is.na(df_CA_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_CA_2018$BID, na.rm = TRUE)
df_CA_2018$BID[is.na(df_CA_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_CA_2018$ASK, na.rm = TRUE)
df_CA_2018$ASK[is.na(df_CA_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_CA_2018$OPENPRC, na.rm = TRUE)
df_CA_2018$OPENPRC[is.na(df_CA_2018$OPENPRC)] <- OPEN_AVG
df_CA_2018
df_CA_2018$text <- clean_tweets(df_CA_2018$text)
df_CA_2018$text <- lemmatize_words(df_CA_2018$text)
#GM
#Remove columns
df_GM_2016 <- df_GM_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_GM_2016
#Ticker
df_GM_2016$TICKER[is.na(df_GM_2016$TICKER)] <- "GM"
#PRC
PRC_AVG <- mean(df_GM_2016$PRC, na.rm = TRUE)
df_GM_2016$PRC[is.na(df_GM_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_GM_2016$VOL, na.rm = TRUE)
df_GM_2016$VOL[is.na(df_GM_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_GM_2016$BID, na.rm = TRUE)
df_GM_2016$BID[is.na(df_GM_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_GM_2016$ASK, na.rm = TRUE)
df_GM_2016$ASK[is.na(df_GM_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_GM_2016$OPENPRC, na.rm = TRUE)
df_GM_2016$OPENPRC[is.na(df_GM_2016$OPENPRC)] <- OPEN_AVG
df_GM_2016
df_GM_2016$text <- clean_tweets(df_GM_2016$text)
df_GM_2016$text <- lemmatize_words(df_GM_2016$text)
#Remove columns
df_GM_2018 <- df_GM_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_GM_2018
#Ticker
df_GM_2018$TICKER[is.na(df_GM_2018$TICKER)] <- "GM"
#PRC
PRC_AVG <- mean(df_GM_2018$PRC, na.rm = TRUE)
df_GM_2018$PRC[is.na(df_GM_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_GM_2018$VOL, na.rm = TRUE)
df_GM_2018$VOL[is.na(df_GM_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_GM_2018$BID, na.rm = TRUE)
df_GM_2018$BID[is.na(df_GM_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_GM_2018$ASK, na.rm = TRUE)
df_GM_2018$ASK[is.na(df_GM_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_GM_2018$OPENPRC, na.rm = TRUE)
df_GM_2018$OPENPRC[is.na(df_GM_2018$OPENPRC)] <- OPEN_AVG
df_GM_2018
df_GM_2018$text <- clean_tweets(df_GM_2018$text)
df_GM_2018$text <- lemmatize_words(df_GM_2018$text)
#Aetna
#Remove columns
df_Aetna_2016 <- df_Aetna_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Aetna_2016
#Ticker
df_Aetna_2016$TICKER[is.na(df_Aetna_2016$TICKER)] <- "AET"
#PRC
PRC_AVG <- mean(df_Aetna_2016$PRC, na.rm = TRUE)
df_Aetna_2016$PRC[is.na(df_Aetna_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Aetna_2016$VOL, na.rm = TRUE)
df_Aetna_2016$VOL[is.na(df_Aetna_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Aetna_2016$BID, na.rm = TRUE)
df_Aetna_2016$BID[is.na(df_Aetna_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Aetna_2016$ASK, na.rm = TRUE)
df_Aetna_2016$ASK[is.na(df_Aetna_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Aetna_2016$OPENPRC, na.rm = TRUE)
df_Aetna_2016$OPENPRC[is.na(df_Aetna_2016$OPENPRC)] <- OPEN_AVG
df_Aetna_2016
df_Aetna_2016$text <- clean_tweets(df_Aetna_2016$text)
df_Aetna_2016$text <- lemmatize_words(df_Aetna_2016$text)
#Remove columns
df_Aetna_2018 <- df_Aetna_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Aetna_2018
#Ticker
df_Aetna_2018$TICKER[is.na(df_Aetna_2018$TICKER)] <- "AET"
#PRC
PRC_AVG <- mean(df_Aetna_2018$PRC, na.rm = TRUE)
df_Aetna_2018$PRC[is.na(df_Aetna_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Aetna_2018$VOL, na.rm = TRUE)
df_Aetna_2018$VOL[is.na(df_Aetna_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Aetna_2018$BID, na.rm = TRUE)
df_Aetna_2018$BID[is.na(df_Aetna_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Aetna_2018$ASK, na.rm = TRUE)
df_Aetna_2018$ASK[is.na(df_Aetna_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Aetna_2018$OPENPRC, na.rm = TRUE)
df_Aetna_2018$OPENPRC[is.na(df_Aetna_2018$OPENPRC)] <- OPEN_AVG
df_Aetna_2018
df_Aetna_2018$text <- clean_tweets(df_Aetna_2018$text)
df_Aetna_2018$text <- lemmatize_words(df_Aetna_2018$text)
#NRG
#Remove columns
df_NRG_2016 <- df_NRG_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_NRG_2016
#Ticker
df_NRG_2016$TICKER[is.na(df_NRG_2016$TICKER)] <- "NRG"
#PRC
PRC_AVG <- mean(df_NRG_2016$PRC, na.rm = TRUE)
df_NRG_2016$PRC[is.na(df_NRG_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_NRG_2016$VOL, na.rm = TRUE)
df_NRG_2016$VOL[is.na(df_NRG_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_NRG_2016$BID, na.rm = TRUE)
df_NRG_2016$BID[is.na(df_NRG_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_NRG_2016$ASK, na.rm = TRUE)
df_NRG_2016$ASK[is.na(df_NRG_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_NRG_2016$OPENPRC, na.rm = TRUE)
df_NRG_2016$OPENPRC[is.na(df_NRG_2016$OPENPRC)] <- OPEN_AVG
df_NRG_2016
df_NRG_2016$text <- clean_tweets(df_NRG_2016$text)
df_NRG_2016$text <- lemmatize_words(df_NRG_2016$text)
#Remove columns
df_NRG_2018 <- df_NRG_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_NRG_2018
#Ticker
df_NRG_2018$TICKER[is.na(df_NRG_2018$TICKER)] <- "NRG"
#PRC
PRC_AVG <- mean(df_NRG_2018$PRC, na.rm = TRUE)
df_NRG_2018$PRC[is.na(df_NRG_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_NRG_2018$VOL, na.rm = TRUE)
df_NRG_2018$VOL[is.na(df_NRG_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_NRG_2018$BID, na.rm = TRUE)
df_NRG_2018$BID[is.na(df_NRG_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_NRG_2018$ASK, na.rm = TRUE)
df_NRG_2018$ASK[is.na(df_NRG_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_NRG_2018$OPENPRC, na.rm = TRUE)
df_NRG_2018$OPENPRC[is.na(df_NRG_2018$OPENPRC)] <- OPEN_AVG
df_NRG_2018
df_NRG_2018$text <- clean_tweets(df_NRG_2018$text)
df_NRG_2018$text <- lemmatize_words(df_NRG_2018$text)
#Medtronic
#Remove columns
df_Medtronic_2016 <- df_Medtronic_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Medtronic_2016
#Ticker
df_Medtronic_2016$TICKER[is.na(df_Medtronic_2016$TICKER)] <- "MDT"
#PRC
PRC_AVG <- mean(df_Medtronic_2016$PRC, na.rm = TRUE)
df_Medtronic_2016$PRC[is.na(df_Medtronic_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Medtronic_2016$VOL, na.rm = TRUE)
df_Medtronic_2016$VOL[is.na(df_Medtronic_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Medtronic_2016$BID, na.rm = TRUE)
df_Medtronic_2016$BID[is.na(df_Medtronic_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Medtronic_2016$ASK, na.rm = TRUE)
df_Medtronic_2016$ASK[is.na(df_Medtronic_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Medtronic_2016$OPENPRC, na.rm = TRUE)
df_Medtronic_2016$OPENPRC[is.na(df_Medtronic_2016$OPENPRC)] <- OPEN_AVG
df_Medtronic_2016
df_Medtronic_2016$text <- clean_tweets(df_Medtronic_2016$text)
df_Medtronic_2016$text <- lemmatize_words(df_Medtronic_2016$text)
#Remove columns
df_Medtronic_2018 <- df_Medtronic_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Medtronic_2018
#Ticker
df_Medtronic_2018$TICKER[is.na(df_Medtronic_2018$TICKER)] <- "MDT"
#PRC
PRC_AVG <- mean(df_Medtronic_2018$PRC, na.rm = TRUE)
df_Medtronic_2018$PRC[is.na(df_Medtronic_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Medtronic_2018$VOL, na.rm = TRUE)
df_Medtronic_2018$VOL[is.na(df_Medtronic_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Medtronic_2018$BID, na.rm = TRUE)
df_Medtronic_2018$BID[is.na(df_Medtronic_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Medtronic_2018$ASK, na.rm = TRUE)
df_Medtronic_2018$ASK[is.na(df_Medtronic_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Medtronic_2018$OPENPRC, na.rm = TRUE)
df_Medtronic_2018$OPENPRC[is.na(df_Medtronic_2018$OPENPRC)] <- OPEN_AVG
df_Medtronic_2018
df_Medtronic_2018$text <- clean_tweets(df_Medtronic_2018$text)
df_Medtronic_2018$text <- lemmatize_words(df_Medtronic_2018$text)
#Juniper
#Remove columns
df_Juniper_2016 <- df_Juniper_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Juniper_2016
#Ticker
df_Juniper_2016$TICKER[is.na(df_Juniper_2016$TICKER)] <- "JNPR"
#PRC
PRC_AVG <- mean(df_Juniper_2016$PRC, na.rm = TRUE)
df_Juniper_2016$PRC[is.na(df_Juniper_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Juniper_2016$VOL, na.rm = TRUE)
df_Juniper_2016$VOL[is.na(df_Juniper_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Juniper_2016$BID, na.rm = TRUE)
df_Juniper_2016$BID[is.na(df_Juniper_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Juniper_2016$ASK, na.rm = TRUE)
df_Juniper_2016$ASK[is.na(df_Juniper_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Juniper_2016$OPENPRC, na.rm = TRUE)
df_Juniper_2016$OPENPRC[is.na(df_Juniper_2016$OPENPRC)] <- OPEN_AVG
df_Juniper_2016
df_Juniper_2016$text <- clean_tweets(df_Juniper_2016$text)
df_Juniper_2016$text <- lemmatize_words(df_Juniper_2016$text)
#Remove columns
df_Juniper_2018 <- df_Juniper_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Juniper_2018
#Ticker
df_Juniper_2018$TICKER[is.na(df_Juniper_2018$TICKER)] <- "JNPR"
#PRC
PRC_AVG <- mean(df_Juniper_2018$PRC, na.rm = TRUE)
df_Juniper_2018$PRC[is.na(df_Juniper_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Juniper_2018$VOL, na.rm = TRUE)
df_Juniper_2018$VOL[is.na(df_Juniper_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Juniper_2018$BID, na.rm = TRUE)
df_Juniper_2018$BID[is.na(df_Juniper_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Juniper_2018$ASK, na.rm = TRUE)
df_Juniper_2018$ASK[is.na(df_Juniper_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Juniper_2018$OPENPRC, na.rm = TRUE)
df_Juniper_2018$OPENPRC[is.na(df_Juniper_2018$OPENPRC)] <- OPEN_AVG
df_Juniper_2018
df_Juniper_2018$text <- clean_tweets(df_Juniper_2018$text)
df_Juniper_2018$text <- lemmatize_words(df_Juniper_2018$text)
#AetnaR
df_AetnaR_2018 <- df_AetnaR_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_AetnaR_2018
#Ticker
df_AetnaR_2018$TICKER[is.na(df_AetnaR_2018$TICKER)] <- "AET"
#PRC
PRC_AVG <- mean(df_AetnaR_2018$PRC, na.rm = TRUE)
df_AetnaR_2018$PRC[is.na(df_AetnaR_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_AetnaR_2018$VOL, na.rm = TRUE)
df_AetnaR_2018$VOL[is.na(df_AetnaR_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_AetnaR_2018$BID, na.rm = TRUE)
df_AetnaR_2018$BID[is.na(df_AetnaR_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_AetnaR_2018$ASK, na.rm = TRUE)
df_AetnaR_2018$ASK[is.na(df_AetnaR_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_AetnaR_2018$OPENPRC, na.rm = TRUE)
df_AetnaR_2018$OPENPRC[is.na(df_AetnaR_2018$OPENPRC)] <- OPEN_AVG
df_AetnaR_2018
df_AetnaR_2018$text <- clean_tweets(df_AetnaR_2018$text)
df_AetnaR_2018$text <- lemmatize_words(df_AetnaR_2018$text)
#Netflix
df_Netflix_2016 <- df_Netflix_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Netflix_2016
#Ticker
df_Netflix_2016$TICKER[is.na(df_Netflix_2016$TICKER)] <- "NFLX"
#PRC
PRC_AVG <- mean(df_Netflix_2016$PRC, na.rm = TRUE)
df_Netflix_2016$PRC[is.na(df_Netflix_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Netflix_2016$VOL, na.rm = TRUE)
df_Netflix_2016$VOL[is.na(df_Netflix_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Netflix_2016$BID, na.rm = TRUE)
df_Netflix_2016$BID[is.na(df_Netflix_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Netflix_2016$ASK, na.rm = TRUE)
df_Netflix_2016$ASK[is.na(df_Netflix_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Netflix_2016$OPENPRC, na.rm = TRUE)
df_Netflix_2016$OPENPRC[is.na(df_Netflix_2016$OPENPRC)] <- OPEN_AVG
df_Netflix_2016
df_Netflix_2016$text <- clean_tweets(df_Netflix_2016$text)
df_Netflix_2016$text <- lemmatize_words(df_Netflix_2016$text)
#Disney
df_Disney_2018 <- df_Disney_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Disney_2018
#Ticker
df_Disney_2018$TICKER[is.na(df_Disney_2018$TICKER)] <- "DIS"
#PRC
PRC_AVG <- mean(df_Disney_2018$PRC, na.rm = TRUE)
df_Disney_2018$PRC[is.na(df_Disney_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Disney_2018$VOL, na.rm = TRUE)
df_Disney_2018$VOL[is.na(df_Disney_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Disney_2018$BID, na.rm = TRUE)
df_Disney_2018$BID[is.na(df_Disney_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Disney_2018$ASK, na.rm = TRUE)
df_Disney_2018$ASK[is.na(df_Disney_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Disney_2018$OPENPRC, na.rm = TRUE)
df_Disney_2018$OPENPRC[is.na(df_Disney_2018$OPENPRC)] <- OPEN_AVG
df_Disney_2018
df_Disney_2018$text <- clean_tweets(df_Disney_2018$text)
df_Disney_2018$text <- lemmatize_words(df_Disney_2018$text)
#Fox
df_Fox_2015 <- df_Fox_2015[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Fox_2015
#Ticker
df_Fox_2015$TICKER[is.na(df_Fox_2015$TICKER)] <- "FOX"
#PRC
PRC_AVG <- mean(df_Fox_2015$PRC, na.rm = TRUE)
df_Fox_2015$PRC[is.na(df_Fox_2015$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Fox_2015$VOL, na.rm = TRUE)
df_Fox_2015$VOL[is.na(df_Fox_2015$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Fox_2015$BID, na.rm = TRUE)
df_Fox_2015$BID[is.na(df_Fox_2015$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Fox_2015$ASK, na.rm = TRUE)
df_Fox_2015$ASK[is.na(df_Fox_2015$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Fox_2015$OPENPRC, na.rm = TRUE)
df_Fox_2015$OPENPRC[is.na(df_Fox_2015$OPENPRC)] <- OPEN_AVG
df_Fox_2015
df_Fox_2015$text <- clean_tweets(df_Fox_2015$text)
df_Fox_2015$text <- lemmatize_words(df_Fox_2015$text)
#Microsoft
df_Microsoft_2016 <- df_Microsoft_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Microsoft_2016
#Ticker
df_Microsoft_2016$TICKER[is.na(df_Microsoft_2016$TICKER)] <- "MSFT"
#PRC
PRC_AVG <- mean(df_Microsoft_2016$PRC, na.rm = TRUE)
df_Microsoft_2016$PRC[is.na(df_Microsoft_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Microsoft_2016$VOL, na.rm = TRUE)
df_Microsoft_2016$VOL[is.na(df_Microsoft_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Microsoft_2016$BID, na.rm = TRUE)
df_Microsoft_2016$BID[is.na(df_Microsoft_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Microsoft_2016$ASK, na.rm = TRUE)
df_Microsoft_2016$ASK[is.na(df_Microsoft_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Microsoft_2016$OPENPRC, na.rm = TRUE)
df_Microsoft_2016$OPENPRC[is.na(df_Microsoft_2016$OPENPRC)] <- OPEN_AVG
df_Microsoft_2016
df_Microsoft_2016$text <- clean_tweets(df_Microsoft_2016$text)
df_Microsoft_2016$text <- lemmatize_words(df_Microsoft_2016$text)
df_Microsoft_2018 <- df_Microsoft_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Microsoft_2018
#Ticker
df_Microsoft_2018$TICKER[is.na(df_Microsoft_2018$TICKER)] <- "MSFT"
#PRC
PRC_AVG <- mean(df_Microsoft_2018$PRC, na.rm = TRUE)
df_Microsoft_2018$PRC[is.na(df_Microsoft_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Microsoft_2018$VOL, na.rm = TRUE)
df_Microsoft_2018$VOL[is.na(df_Microsoft_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Microsoft_2018$BID, na.rm = TRUE)
df_Microsoft_2018$BID[is.na(df_Microsoft_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Microsoft_2018$ASK, na.rm = TRUE)
df_Microsoft_2018$ASK[is.na(df_Microsoft_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Microsoft_2018$OPENPRC, na.rm = TRUE)
df_Microsoft_2018$OPENPRC[is.na(df_Microsoft_2018$OPENPRC)] <- OPEN_AVG
df_Microsoft_2018
df_Microsoft_2018$text <- clean_tweets(df_Microsoft_2018$text)
df_Microsoft_2018$text <- lemmatize_words(df_Microsoft_2018$text)
#Juniper_Shaygan
df_Juniper_S_2014 <- df_Juniper_S_2014[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Juniper_S_2014
#Ticker
df_Juniper_S_2014$TICKER[is.na(df_Juniper_S_2014$TICKER)] <- "JNPR"
#PRC
PRC_AVG <- mean(df_Juniper_S_2014$PRC, na.rm = TRUE)
df_Juniper_S_2014$PRC[is.na(df_Juniper_S_2014$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Juniper_S_2014$VOL, na.rm = TRUE)
df_Juniper_S_2014$VOL[is.na(df_Juniper_S_2014$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Juniper_S_2014$BID, na.rm = TRUE)
df_Juniper_S_2014$BID[is.na(df_Juniper_S_2014$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Juniper_S_2014$ASK, na.rm = TRUE)
df_Juniper_S_2014$ASK[is.na(df_Juniper_S_2014$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Juniper_S_2014$OPENPRC, na.rm = TRUE)
df_Juniper_S_2014$OPENPRC[is.na(df_Juniper_S_2014$OPENPRC)] <- OPEN_AVG
df_Juniper_S_2014
df_Juniper_S_2014$text <- clean_tweets(df_Juniper_S_2014$text)
df_Juniper_S_2014$text <- lemmatize_words(df_Juniper_S_2014$text)
df_Juniper_S_2016 <- df_Juniper_S_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Juniper_S_2016
#Ticker
df_Juniper_S_2016$TICKER[is.na(df_Juniper_S_2016$TICKER)] <- "JNPR"
#PRC
PRC_AVG <- mean(df_Juniper_S_2016$PRC, na.rm = TRUE)
df_Juniper_S_2016$PRC[is.na(df_Juniper_S_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Juniper_S_2016$VOL, na.rm = TRUE)
df_Juniper_S_2016$VOL[is.na(df_Juniper_S_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Juniper_S_2016$BID, na.rm = TRUE)
df_Juniper_S_2016$BID[is.na(df_Juniper_S_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Juniper_S_2016$ASK, na.rm = TRUE)
df_Juniper_S_2016$ASK[is.na(df_Juniper_S_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Juniper_S_2016$OPENPRC, na.rm = TRUE)
df_Juniper_S_2016$OPENPRC[is.na(df_Juniper_S_2016$OPENPRC)] <- OPEN_AVG
df_Juniper_S_2016
df_Juniper_S_2016$text <- clean_tweets(df_Juniper_S_2016$text)
df_Juniper_S_2016$text <- lemmatize_words(df_Juniper_S_2016$text)
#Synchrony Financial
df_SYFM_2016 <- df_SYFM_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_SYFM_2016
#Ticker
df_SYFM_2016$TICKER[is.na(df_SYFM_2016$TICKER)] <- "SYF"
#PRC
PRC_AVG <- mean(df_SYFM_2016$PRC, na.rm = TRUE)
df_SYFM_2016$PRC[is.na(df_SYFM_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_SYFM_2016$VOL, na.rm = TRUE)
df_SYFM_2016$VOL[is.na(df_SYFM_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_SYFM_2016$BID, na.rm = TRUE)
df_SYFM_2016$BID[is.na(df_SYFM_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_SYFM_2016$ASK, na.rm = TRUE)
df_SYFM_2016$ASK[is.na(df_SYFM_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_SYFM_2016$OPENPRC, na.rm = TRUE)
df_SYFM_2016$OPENPRC[is.na(df_SYFM_2016$OPENPRC)] <- OPEN_AVG
df_SYFM_2016
df_SYFM_2016$text <- clean_tweets(df_SYFM_2016$text)
df_SYFM_2016$text <- lemmatize_words(df_SYFM_2016$text)
df_SYFM_2018 <- df_SYFM_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_SYFM_2018
#Ticker
df_SYFM_2018$TICKER[is.na(df_SYFM_2018$TICKER)] <- "SYF"
#PRC
PRC_AVG <- mean(df_SYFM_2018$PRC, na.rm = TRUE)
df_SYFM_2018$PRC[is.na(df_SYFM_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_SYFM_2018$VOL, na.rm = TRUE)
df_SYFM_2018$VOL[is.na(df_SYFM_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_SYFM_2018$BID, na.rm = TRUE)
df_SYFM_2018$BID[is.na(df_SYFM_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_SYFM_2018$ASK, na.rm = TRUE)
df_SYFM_2018$ASK[is.na(df_SYFM_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_SYFM_2018$OPENPRC, na.rm = TRUE)
df_SYFM_2018$OPENPRC[is.na(df_SYFM_2018$OPENPRC)] <- OPEN_AVG
df_SYFM_2018
df_SYFM_2018$text <- clean_tweets(df_SYFM_2018$text)
df_SYFM_2018$text <- lemmatize_words(df_SYFM_2018$text)
#Southern company
df_Southern_2016 <- df_Southern_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Southern_2016
#Ticker
df_Southern_2016$TICKER[is.na(df_Southern_2016$TICKER)] <- "SO"
#PRC
PRC_AVG <- mean(df_Southern_2016$PRC, na.rm = TRUE)
df_Southern_2016$PRC[is.na(df_Southern_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Southern_2016$VOL, na.rm = TRUE)
df_Southern_2016$VOL[is.na(df_Southern_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Southern_2016$BID, na.rm = TRUE)
df_Southern_2016$BID[is.na(df_Southern_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Southern_2016$ASK, na.rm = TRUE)
df_Southern_2016$ASK[is.na(df_Southern_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Southern_2016$OPENPRC, na.rm = TRUE)
df_Southern_2016$OPENPRC[is.na(df_Southern_2016$OPENPRC)] <- OPEN_AVG
df_Southern_2016
df_Southern_2016$text <- clean_tweets(df_Southern_2016$text)
df_Southern_2016$text <- lemmatize_words(df_Southern_2016$text)
df_Southern_2018 <- df_Southern_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Southern_2018
#Ticker
df_Southern_2018$TICKER[is.na(df_Southern_2018$TICKER)] <- "SO"
#PRC
PRC_AVG <- mean(df_Southern_2018$PRC, na.rm = TRUE)
df_Southern_2018$PRC[is.na(df_Southern_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Southern_2018$VOL, na.rm = TRUE)
df_Southern_2018$VOL[is.na(df_Southern_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Southern_2018$BID, na.rm = TRUE)
df_Southern_2018$BID[is.na(df_Southern_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Southern_2018$ASK, na.rm = TRUE)
df_Southern_2018$ASK[is.na(df_Southern_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Southern_2018$OPENPRC, na.rm = TRUE)
df_Southern_2018$OPENPRC[is.na(df_Southern_2018$OPENPRC)] <- OPEN_AVG
df_Southern_2018
df_Southern_2018$text <- clean_tweets(df_Southern_2018$text)
df_Southern_2018$text <- lemmatize_words(df_Southern_2018$text)
#Apple
df_Apple_2016 <- df_Apple_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Apple_2016
#Ticker
df_Apple_2016$TICKER[is.na(df_Apple_2016$TICKER)] <- "AAPL"
#PRC
PRC_AVG <- mean(df_Apple_2016$PRC, na.rm = TRUE)
df_Apple_2016$PRC[is.na(df_Apple_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Apple_2016$VOL, na.rm = TRUE)
df_Apple_2016$VOL[is.na(df_Apple_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Apple_2016$BID, na.rm = TRUE)
df_Apple_2016$BID[is.na(df_Apple_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Apple_2016$ASK, na.rm = TRUE)
df_Apple_2016$ASK[is.na(df_Apple_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Apple_2016$OPENPRC, na.rm = TRUE)
df_Apple_2016$OPENPRC[is.na(df_Apple_2016$OPENPRC)] <- OPEN_AVG
df_Apple_2016
df_Apple_2016$text <- clean_tweets(df_Apple_2016$text)
df_Apple_2016$text <- lemmatize_words(df_Apple_2016$text)
df_Apple_2018 <- df_Apple_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Apple_2018
#Ticker
df_Apple_2018$TICKER[is.na(df_Apple_2018$TICKER)] <- "AAPL"
#PRC
PRC_AVG <- mean(df_Apple_2018$PRC, na.rm = TRUE)
df_Apple_2018$PRC[is.na(df_Apple_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Apple_2018$VOL, na.rm = TRUE)
df_Apple_2018$VOL[is.na(df_Apple_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Apple_2018$BID, na.rm = TRUE)
df_Apple_2018$BID[is.na(df_Apple_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Apple_2018$ASK, na.rm = TRUE)
df_Apple_2018$ASK[is.na(df_Apple_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Apple_2018$OPENPRC, na.rm = TRUE)
df_Apple_2018$OPENPRC[is.na(df_Apple_2018$OPENPRC)] <- OPEN_AVG
df_Apple_2018
df_Apple_2018$text <- clean_tweets(df_Apple_2018$text)
df_Apple_2018$text <- lemmatize_words(df_Apple_2018$text)
#XL
df_XL_2016 <- df_XL_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_XL_2016
#Ticker
df_XL_2016$TICKER[is.na(df_XL_2016$TICKER)] <- "XL"
#PRC
PRC_AVG <- mean(df_XL_2016$PRC, na.rm = TRUE)
df_XL_2016$PRC[is.na(df_XL_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_XL_2016$VOL, na.rm = TRUE)
df_XL_2016$VOL[is.na(df_XL_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_XL_2016$BID, na.rm = TRUE)
df_XL_2016$BID[is.na(df_XL_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_XL_2016$ASK, na.rm = TRUE)
df_XL_2016$ASK[is.na(df_XL_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_XL_2016$OPENPRC, na.rm = TRUE)
df_XL_2016$OPENPRC[is.na(df_XL_2016$OPENPRC)] <- OPEN_AVG
df_XL_2016
df_XL_2016$text <- clean_tweets(df_XL_2016$text)
df_XL_2016$text <- lemmatize_words(df_XL_2016$text)
df_XL_2018 <- df_XL_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_XL_2018
#Ticker
df_XL_2018$TICKER[is.na(df_XL_2018$TICKER)] <- "XL"
#PRC
PRC_AVG <- mean(df_XL_2018$PRC, na.rm = TRUE)
df_XL_2018$PRC[is.na(df_XL_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_XL_2018$VOL, na.rm = TRUE)
df_XL_2018$VOL[is.na(df_XL_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_XL_2018$BID, na.rm = TRUE)
df_XL_2018$BID[is.na(df_XL_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_XL_2018$ASK, na.rm = TRUE)
df_XL_2018$ASK[is.na(df_XL_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_XL_2018$OPENPRC, na.rm = TRUE)
df_XL_2018$OPENPRC[is.na(df_XL_2018$OPENPRC)] <- OPEN_AVG
df_XL_2018
df_XL_2018$text <- clean_tweets(df_XL_2018$text)
df_XL_2018$text <- lemmatize_words(df_XL_2018$text)
#Tyson foods
df_Tysonf_2016 <- df_Tysonf_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Tysonf_2016
#Ticker
df_Tysonf_2016$TICKER[is.na(df_Tysonf_2016$TICKER)] <- "TSN"
#PRC
PRC_AVG <- mean(df_Tysonf_2016$PRC, na.rm = TRUE)
df_Tysonf_2016$PRC[is.na(df_Tysonf_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Tysonf_2016$VOL, na.rm = TRUE)
df_Tysonf_2016$VOL[is.na(df_Tysonf_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Tysonf_2016$BID, na.rm = TRUE)
df_Tysonf_2016$BID[is.na(df_Tysonf_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Tysonf_2016$ASK, na.rm = TRUE)
df_Tysonf_2016$ASK[is.na(df_Tysonf_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Tysonf_2016$OPENPRC, na.rm = TRUE)
df_Tysonf_2016$OPENPRC[is.na(df_Tysonf_2016$OPENPRC)] <- OPEN_AVG
df_Tysonf_2016
df_Tysonf_2016$text <- clean_tweets(df_Tysonf_2016$text)
df_Tysonf_2016$text <- lemmatize_words(df_Tysonf_2016$text)
#Tyson foods
df_Tysonf_2018 <- df_Tysonf_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Tysonf_2018
#Ticker
df_Tysonf_2018$TICKER[is.na(df_Tysonf_2018$TICKER)] <- "TSN"
#PRC
PRC_AVG <- mean(df_Tysonf_2018$PRC, na.rm = TRUE)
df_Tysonf_2018$PRC[is.na(df_Tysonf_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Tysonf_2018$VOL, na.rm = TRUE)
df_Tysonf_2018$VOL[is.na(df_Tysonf_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Tysonf_2018$BID, na.rm = TRUE)
df_Tysonf_2018$BID[is.na(df_Tysonf_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Tysonf_2018$ASK, na.rm = TRUE)
df_Tysonf_2018$ASK[is.na(df_Tysonf_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Tysonf_2018$OPENPRC, na.rm = TRUE)
df_Tysonf_2018$OPENPRC[is.na(df_Tysonf_2018$OPENPRC)] <- OPEN_AVG
df_Tysonf_2018
df_Tysonf_2018$text <- clean_tweets(df_Tysonf_2018$text)
df_Tysonf_2018$text <- lemmatize_words(df_Tysonf_2018$text)
#Akamai
df_Akamai_2016 <- df_Akamai_2016[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Akamai_2016
#Ticker
df_Akamai_2016$TICKER[is.na(df_Akamai_2016$TICKER)] <- "AKAM"
#PRC
PRC_AVG <- mean(df_Akamai_2016$PRC, na.rm = TRUE)
df_Akamai_2016$PRC[is.na(df_Akamai_2016$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Akamai_2016$VOL, na.rm = TRUE)
df_Akamai_2016$VOL[is.na(df_Akamai_2016$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Akamai_2016$BID, na.rm = TRUE)
df_Akamai_2016$BID[is.na(df_Akamai_2016$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Akamai_2016$ASK, na.rm = TRUE)
df_Akamai_2016$ASK[is.na(df_Akamai_2016$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Akamai_2016$OPENPRC, na.rm = TRUE)
df_Akamai_2016$OPENPRC[is.na(df_Akamai_2016$OPENPRC)] <- OPEN_AVG
df_Akamai_2016
df_Akamai_2016$text <- clean_tweets(df_Akamai_2016$text)
df_Akamai_2016$text <- lemmatize_words(df_Akamai_2016$text)
df_Akamai_2018 <- df_Akamai_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_Akamai_2018
#Ticker
df_Akamai_2018$TICKER[is.na(df_Akamai_2018$TICKER)] <- "AKAM"
#PRC
PRC_AVG <- mean(df_Akamai_2018$PRC, na.rm = TRUE)
df_Akamai_2018$PRC[is.na(df_Akamai_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_Akamai_2018$VOL, na.rm = TRUE)
df_Akamai_2018$VOL[is.na(df_Akamai_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_Akamai_2018$BID, na.rm = TRUE)
df_Akamai_2018$BID[is.na(df_Akamai_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_Akamai_2018$ASK, na.rm = TRUE)
df_Akamai_2018$ASK[is.na(df_Akamai_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_Akamai_2018$OPENPRC, na.rm = TRUE)
df_Akamai_2018$OPENPRC[is.na(df_Akamai_2018$OPENPRC)] <- OPEN_AVG
df_Akamai_2018
df_Akamai_2018$text <- clean_tweets(df_Akamai_2018$text)
df_Akamai_2018$text <- lemmatize_words(df_Akamai_2018$text)
#Google
df_GOOGL_2015 <-merge(GOOGL_2015, GOOGL_SP_2016, by = "date", all.x = TRUE)
write.csv(df_GOOGL_2015, file = "Google_2015", row.names = FALSE)
df_GOOGL_2015 <- df_GOOGL_2015[,-c(6,8,9,10,15,17,18,19,20,21)]
df_GOOGL_2015
#Ticker
df_GOOGL_2015$TICKER[is.na(df_GOOGL_2015$TICKER)] <- "GOOGL"
#PRC
PRC_AVG <- mean(df_GOOGL_2015$PRC, na.rm = TRUE)
df_GOOGL_2015$PRC[is.na(df_GOOGL_2015$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_GOOGL_2015$VOL, na.rm = TRUE)
df_GOOGL_2015$VOL[is.na(df_GOOGL_2015$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_GOOGL_2015$BID, na.rm = TRUE)
df_GOOGL_2015$BID[is.na(df_GOOGL_2015$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_GOOGL_2015$ASK, na.rm = TRUE)
df_GOOGL_2015$ASK[is.na(df_GOOGL_2015$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_GOOGL_2015$OPENPRC, na.rm = TRUE)
df_GOOGL_2015$OPENPRC[is.na(df_GOOGL_2015$OPENPRC)] <- OPEN_AVG
df_GOOGL_2015
df_GOOGL_2015$text <- clean_tweets(df_GOOGL_2015$text)
df_GOOGL_2015$text <- lemmatize_words(df_GOOGL_2015$text)
df_GOOGL_2018 <-merge(GOOGL_2018, GOOGLE_SP_2018, by = "date", all.x = TRUE)
write.csv(df_GOOGL_2018, file = "Google_2018", row.names = FALSE)
df_GOOGL_2018 <- df_GOOGL_2018[,-c(6,8,9,10,15,17,18,19,20,21)]
df_GOOGL_2018
#Ticker
df_GOOGL_2018$TICKER[is.na(df_GOOGL_2018$TICKER)] <- "GOOGL"
#PRC
PRC_AVG <- mean(df_GOOGL_2018$PRC, na.rm = TRUE)
df_GOOGL_2018$PRC[is.na(df_GOOGL_2018$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_GOOGL_2018$VOL, na.rm = TRUE)
df_GOOGL_2018$VOL[is.na(df_GOOGL_2018$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_GOOGL_2018$BID, na.rm = TRUE)
df_GOOGL_2018$BID[is.na(df_GOOGL_2018$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_GOOGL_2018$ASK, na.rm = TRUE)
df_GOOGL_2018$ASK[is.na(df_GOOGL_2018$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_GOOGL_2018$OPENPRC, na.rm = TRUE)
df_GOOGL_2018$OPENPRC[is.na(df_GOOGL_2018$OPENPRC)] <- OPEN_AVG
df_GOOGL_2018
df_GOOGL_2018$text <- clean_tweets(df_GOOGL_2018$text)
df_GOOGL_2018$text <- lemmatize_words(df_GOOGL_2018$text)
##Covid datasets
#WU
df_WU_covid <-merge(WU_covid, WU_SP_covid, by = "date", all.x = TRUE)
write.csv(df_WU_covid, file = "WU_COVID", row.names = FALSE)
df_WU_covid <- df_WU_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_WU_covid
#Ticker
df_WU_covid$TICKER[is.na(df_WU_covid$TICKER)] <- "WU"
#PRC
PRC_AVG <- mean(df_WU_covid$PRC, na.rm = TRUE)
df_WU_covid$PRC[is.na(df_WU_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_WU_covid$VOL, na.rm = TRUE)
df_WU_covid$VOL[is.na(df_WU_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_WU_covid$BID, na.rm = TRUE)
df_WU_covid$BID[is.na(df_WU_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_WU_covid$ASK, na.rm = TRUE)
df_WU_covid$ASK[is.na(df_WU_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_WU_covid$OPENPRC, na.rm = TRUE)
df_WU_covid$OPENPRC[is.na(df_WU_covid$OPENPRC)] <- OPEN_AVG
df_WU_covid
df_WU_covid$text <- clean_tweets(df_WU_covid$text)
df_WU_covid$text <- lemmatize_words(df_WU_covid$text)
#AAPL
df_AAPL_covid <-merge(AAPL_covid, AAPL_SP_covid, by = "date", all.x = TRUE)
write.csv(df_AAPL_covid, file = "AAPL_COVID", row.names = FALSE)
df_AAPL_covid <- df_AAPL_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_AAPL_covid
#Ticker
df_AAPL_covid$TICKER[is.na(df_AAPL_covid$TICKER)] <- "AAPL"
#PRC
PRC_AVG <- mean(df_AAPL_covid$PRC, na.rm = TRUE)
df_AAPL_covid$PRC[is.na(df_AAPL_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_AAPL_covid$VOL, na.rm = TRUE)
df_AAPL_covid$VOL[is.na(df_AAPL_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_AAPL_covid$BID, na.rm = TRUE)
df_AAPL_covid$BID[is.na(df_AAPL_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_AAPL_covid$ASK, na.rm = TRUE)
df_AAPL_covid$ASK[is.na(df_AAPL_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_AAPL_covid$OPENPRC, na.rm = TRUE)
df_AAPL_covid$OPENPRC[is.na(df_AAPL_covid$OPENPRC)] <- OPEN_AVG
df_AAPL_covid
df_AAPL_covid$text <- clean_tweets(df_AAPL_covid$text)
df_AAPL_covid$text <- lemmatize_words(df_AAPL_covid$text)
#RMD
df_RMD_covid <-merge(RMD_covid, RMD_SP_covid, by = "date", all.x = TRUE)
write.csv(df_RMD_covid, file = "RMD_COVID", row.names = FALSE)
df_RMD_covid <- df_RMD_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_RMD_covid
#Ticker
df_RMD_covid$TICKER[is.na(df_RMD_covid$TICKER)] <- "RMD"
#PRC
PRC_AVG <- mean(df_RMD_covid$PRC, na.rm = TRUE)
df_RMD_covid$PRC[is.na(df_RMD_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_RMD_covid$VOL, na.rm = TRUE)
df_RMD_covid$VOL[is.na(df_RMD_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_RMD_covid$BID, na.rm = TRUE)
df_RMD_covid$BID[is.na(df_RMD_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_RMD_covid$ASK, na.rm = TRUE)
df_RMD_covid$ASK[is.na(df_RMD_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_RMD_covid$OPENPRC, na.rm = TRUE)
df_RMD_covid$OPENPRC[is.na(df_RMD_covid$OPENPRC)] <- OPEN_AVG
df_RMD_covid
df_RMD_covid$text <- clean_tweets(df_RMD_covid$text)
df_RMD_covid$text <- lemmatize_words(df_RMD_covid$text)
#GOOGL
df_GOOGL_covid <-merge(GOOGL_covid, GOOGL_SP_covid, by = "date", all.x = TRUE)
write.csv(df_GOOGL_covid, file = "GOOGL_COVID", row.names = FALSE)
df_GOOGL_covid <- df_GOOGL_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_GOOGL_covid
#Ticker
df_GOOGL_covid$TICKER[is.na(df_GOOGL_covid$TICKER)] <- "GOOGL"
#PRC
PRC_AVG <- mean(df_GOOGL_covid$PRC, na.rm = TRUE)
df_GOOGL_covid$PRC[is.na(df_GOOGL_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_GOOGL_covid$VOL, na.rm = TRUE)
df_GOOGL_covid$VOL[is.na(df_GOOGL_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_GOOGL_covid$BID, na.rm = TRUE)
df_GOOGL_covid$BID[is.na(df_GOOGL_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_GOOGL_covid$ASK, na.rm = TRUE)
df_GOOGL_covid$ASK[is.na(df_GOOGL_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_GOOGL_covid$OPENPRC, na.rm = TRUE)
df_GOOGL_covid$OPENPRC[is.na(df_GOOGL_covid$OPENPRC)] <- OPEN_AVG
df_GOOGL_covid
df_GOOGL_covid$text <- clean_tweets(df_GOOGL_covid$text)
df_GOOGL_covid$text <- lemmatize_words(df_GOOGL_covid$text)
#AGN
df_AGN_covid <-merge(AGN_covid, AGN_SP_covid, by = "date", all.x = TRUE)
write.csv(df_AGN_covid, file = "AGN_COVID", row.names = FALSE)
df_AGN_covid <- df_AGN_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_AGN_covid
#Ticker
df_AGN_covid$TICKER[is.na(df_AGN_covid$TICKER)] <- "AGN"
#PRC
PRC_AVG <- mean(df_AGN_covid$PRC, na.rm = TRUE)
df_AGN_covid$PRC[is.na(df_AGN_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_AGN_covid$VOL, na.rm = TRUE)
df_AGN_covid$VOL[is.na(df_AGN_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_AGN_covid$BID, na.rm = TRUE)
df_AGN_covid$BID[is.na(df_AGN_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_AGN_covid$ASK, na.rm = TRUE)
df_AGN_covid$ASK[is.na(df_AGN_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_AGN_covid$OPENPRC, na.rm = TRUE)
df_AGN_covid$OPENPRC[is.na(df_AGN_covid$OPENPRC)] <- OPEN_AVG
df_AGN_covid
df_AGN_covid$text <- clean_tweets(df_AGN_covid$text)
df_AGN_covid$text <- lemmatize_words(df_AGN_covid$text)
#AMAZON
df_AMZN_covid <-merge(AMZN_covid, AMZN_SP_covid, by = "date", all.x = TRUE)
write.csv(df_AMZN_covid, file = "AMZN_COVID", row.names = FALSE)
df_AMZN_covid <- df_AMZN_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_AMZN_covid
#Ticker
df_AMZN_covid$TICKER[is.na(df_AMZN_covid$TICKER)] <- "AMZN"
#PRC
PRC_AVG <- mean(df_AMZN_covid$PRC, na.rm = TRUE)
df_AMZN_covid$PRC[is.na(df_AMZN_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_AMZN_covid$VOL, na.rm = TRUE)
df_AMZN_covid$VOL[is.na(df_AMZN_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_AMZN_covid$BID, na.rm = TRUE)
df_AMZN_covid$BID[is.na(df_AMZN_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_AMZN_covid$ASK, na.rm = TRUE)
df_AMZN_covid$ASK[is.na(df_AMZN_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_AMZN_covid$OPENPRC, na.rm = TRUE)
df_AMZN_covid$OPENPRC[is.na(df_AMZN_covid$OPENPRC)] <- OPEN_AVG
df_AMZN_covid
df_AMZN_covid$text <- clean_tweets(df_AMZN_covid$text)
df_AMZN_covid$text <- lemmatize_words(df_AMZN_covid$text)
#Disney
df_DIS_covid <-merge(DIS_covid, DIS_SP_covid, by = "date", all.x = TRUE)
write.csv(df_DIS_covid, file = "DIS_COVID", row.names = FALSE)
df_DIS_covid <- df_DIS_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_DIS_covid
#Ticker
df_DIS_covid$TICKER[is.na(df_DIS_covid$TICKER)] <- "DIS"
#PRC
PRC_AVG <- mean(df_DIS_covid$PRC, na.rm = TRUE)
df_DIS_covid$PRC[is.na(df_DIS_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_DIS_covid$VOL, na.rm = TRUE)
df_DIS_covid$VOL[is.na(df_DIS_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_DIS_covid$BID, na.rm = TRUE)
df_DIS_covid$BID[is.na(df_DIS_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_DIS_covid$ASK, na.rm = TRUE)
df_DIS_covid$ASK[is.na(df_DIS_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_DIS_covid$OPENPRC, na.rm = TRUE)
df_DIS_covid$OPENPRC[is.na(df_DIS_covid$OPENPRC)] <- OPEN_AVG
df_DIS_covid
df_DIS_covid$text <- clean_tweets(df_DIS_covid$text)
df_DIS_covid$text <- lemmatize_words(df_DIS_covid$text)
#Microsoft
df_MSFT_covid <-merge(MSFT_covid, MSFT_SP_covid, by = "date", all.x = TRUE)
write.csv(df_MSFT_covid, file = "MSFT_COVID", row.names = FALSE)
df_MSFT_covid <- df_MSFT_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_MSFT_covid
#Ticker
df_MSFT_covid$TICKER[is.na(df_MSFT_covid$TICKER)] <- "MSFT"
#PRC
PRC_AVG <- mean(df_MSFT_covid$PRC, na.rm = TRUE)
df_MSFT_covid$PRC[is.na(df_MSFT_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_MSFT_covid$VOL, na.rm = TRUE)
df_MSFT_covid$VOL[is.na(df_MSFT_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_MSFT_covid$BID, na.rm = TRUE)
df_MSFT_covid$BID[is.na(df_MSFT_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_MSFT_covid$ASK, na.rm = TRUE)
df_MSFT_covid$ASK[is.na(df_MSFT_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_MSFT_covid$OPENPRC, na.rm = TRUE)
df_MSFT_covid$OPENPRC[is.na(df_MSFT_covid$OPENPRC)] <- OPEN_AVG
df_MSFT_covid
df_MSFT_covid$text <- clean_tweets(df_MSFT_covid$text)
df_MSFT_covid$text <- lemmatize_words(df_MSFT_covid$text)
#Medtronic
df_MDT_covid <-merge(MDT_Covid, MDT_SP_covid, by = "date", all.x = TRUE)
write.csv(df_MDT_covid, file = "MDT_COVID", row.names = FALSE)
df_MDT_covid <- df_MDT_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_MDT_covid
#Ticker
df_MDT_covid$TICKER[is.na(df_MDT_covid$TICKER)] <- "MDT"
#PRC
PRC_AVG <- mean(df_MDT_covid$PRC, na.rm = TRUE)
df_MDT_covid$PRC[is.na(df_MDT_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_MDT_covid$VOL, na.rm = TRUE)
df_MDT_covid$VOL[is.na(df_MDT_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_MDT_covid$BID, na.rm = TRUE)
df_MDT_covid$BID[is.na(df_MDT_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_MDT_covid$ASK, na.rm = TRUE)
df_MDT_covid$ASK[is.na(df_MDT_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_MDT_covid$OPENPRC, na.rm = TRUE)
df_MDT_covid$OPENPRC[is.na(df_MDT_covid$OPENPRC)] <- OPEN_AVG
df_MDT_covid
df_MDT_covid$text <- clean_tweets(df_MDT_covid$text)
df_MDT_covid$text <- lemmatize_words(df_MDT_covid$text)
#RedHat
df_RHT_covid <-merge(RHT_covid, RHT_SP_covid, by = "date", all.x = TRUE)
write.csv(df_RHT_covid, file = "RHT_COVID", row.names = FALSE)
df_RHT_covid <- df_RHT_covid[,-c(6,8,9,10,15,17,18,19,20,21)]
df_RHT_covid
#Ticker
df_RHT_covid$TICKER[is.na(df_RHT_covid$TICKER)] <- "RHT"
#PRC
PRC_AVG <- mean(df_RHT_covid$PRC, na.rm = TRUE)
df_RHT_covid$PRC[is.na(df_RHT_covid$PRC)] <- PRC_AVG
#VOL
VOL_AVG <- mean(df_RHT_covid$VOL, na.rm = TRUE)
df_RHT_covid$VOL[is.na(df_RHT_covid$VOL)] <- VOL_AVG
#BID
BID_AVG <- BID_AVG <- mean(df_RHT_covid$BID, na.rm = TRUE)
df_RHT_covid$BID[is.na(df_RHT_covid$BID)] <- BID_AVG
#ASK
ASK_AVG <- ASK_AVG <- mean(df_RHT_covid$ASK, na.rm = TRUE)
df_RHT_covid$ASK[is.na(df_RHT_covid$ASK)] <- ASK_AVG
#OPENPRC
OPEN_AVG <- OPEN_AVG <- mean(df_RHT_covid$OPENPRC, na.rm = TRUE)
df_RHT_covid$OPENPRC[is.na(df_RHT_covid$OPENPRC)] <- OPEN_AVG
df_RHT_covid
df_RHT_covid$text <- clean_tweets(df_RHT_covid$text)
df_RHT_covid$text <- lemmatize_words(df_RHT_covid$text)
##Wordclouds
#Packages
library(wordcloud)
Loading required package: RColorBrewer
library(RColorBrewer)
library(wordcloud2)
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
library(tm)
Loading required package: NLP
library("tidyverse")
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
── Attaching packages ───────────────────────────────── tidyverse 1.3.2 ──✔ ggplot2 3.4.2 ✔ purrr 0.3.4
✔ tibble 3.1.8 ✔ dplyr 1.0.10
✔ tidyr 1.2.1 ✔ stringr 1.5.0
✔ readr 2.1.4 ✔ forcats 0.5.2 ── Conflicts ──────────────────────────────────── tidyverse_conflicts() ──
✖ ggplot2::annotate() masks NLP::annotate()
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
#vector containing only the text
text <- df_Test$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeWords, stopwords("english"))
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))
#Johnson_2016
#vector containing only the text
text <- df_Johnson_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Johnson 2017
#vector containing only the text
text <- df_Johnson_2017$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Nasdaq
#vector containing only the text
text <- df_NASDAQ$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Autodesk
#vector containing only the text
text <- df_autodesk$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Hasbro
#vector containing only the text
text <- df_Hasbro_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#vector containing only the text
text <- df_Hasbro_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Intel 2016
#vector containing only the text
text <- df_Intel_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Intel 2018
#vector containing only the text
text <- df_Intel_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Activision 2016
#vector containing only the text
text <- df_Activision_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Activision 2016
#vector containing only the text
text <- df_Activision_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Inuit 2016
#vector containing only the text
text <- df_Inuit_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Inuit 2018
#vector containing only the text
text <- df_Inuit_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Allergan 2016
#vector containing only the text
text <- df_Allergan_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Allergan 2018
#vector containing only the text
text <- df_Allergan_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Humana 2016
#vector containing only the text
text <- df_Humana_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Humana 2018
#vector containing only the text
text <- df_Humana_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Autodesk CB 2016
#vector containing only the text
text <- df_CB_autodesk_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Autodesk 2018
#vector containing only the text
text <- df_CB_autodesk_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Equinox 2018
#vector containing only the text
text <- df_equinox_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Cisco 2016
#vector containing only the text
text <- df_cisco_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Cisco 2018
#vector containing only the text
text <- df_cisco_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#EBAY 2016
#vector containing only the text
text <- df_EBAY_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#vector containing only the text
text <- df_EBAY_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Davita 2016
#vector containing only the text
text <- df_Davita_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Davita 2018
#vector containing only the text
text <- df_Davita_2017$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Illumina 2016
#vector containing only the text
text <- df_Illumina_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Illumina 2018
#vector containing only the text
text <- df_Illumina_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Homedepot
#vector containing only the text
text <- df_Homedepot_2013$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Southwest airlines 2016
#vector containing only the text
text <- df_Southwest_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Southwest Airlines 2018
#vector containing only the text
text <- df_Southwest_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#FIS 2016
#vector containing only the text
text <- df_FIS_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#FIS 2018
#vector containing only the text
text <- df_FIS_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Leucadia Nation
#vector containing only the text
text <- df_Leucadia_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Leucadia Nation 2018
#vector containing only the text
text <- df_Leucadia_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Verizon
#vector containing only the text
text <- df_Verizon_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

text <- df_WU_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Western Union 2018
#vector containing only the text
text <- df_WU_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#RedHat 2016
#vector containing only the text
text <- df_RedHat_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#RedHat 2018
#vector containing only the text
text <- df_RedHat_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Amazon 2016
#vector containing only the text
text <- df_AMZN_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

text <- df_AMZN_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#vector containing only the text
text <- df_GE_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#GE 2017
#vector containing only the text
text <- df_GE_2017$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Fiserv 2016
#vector containing only the text
text <- df_Fiserv_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Fiserv 2018
#vector containing only the text
text <- df_Fiserv_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#vector containing only the text
text <- df_WM_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Waste Management 2018
#vector containing only the text
text <- df_WM_2018$text
#Wills Tower 2016
#vector containing only the text
text <- df_Wills_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Wills Tower 2018
#vector containing only the text
text <- df_Wills_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Tripadvisor 2016
#vector containing only the text
text <- df_tripadvisor_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

<!-- rnb-source-end -->
<!-- rnb-output-begin eyJkYXRhIjoiRXJyb3I6IGF0dGVtcHQgdG8gdXNlIHplcm8tbGVuZ3RoIHZhcmlhYmxlIG5hbWVcbiJ9 -->
Error: attempt to use zero-length variable name
<!-- rnb-output-end -->
<!-- rnb-chunk-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuI1RyaXBhZHZpc29yIDIwMThcblxuI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHRcbnRleHQgPC0gZGZfdHJpcGFkdmlzb3JfMjAxOCR0ZXh0XG4jY29ycHVzICBcbmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSlcblxuZG9jcyA8LSBkb2NzICU+JVxuICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lXG4gIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lXG4gIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpXG5gYGAifQ== -->
```r
#Tripadvisor 2018
#vector containing only the text
text <- df_tripadvisor_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#DavitaKent
#vector containing only the text
text <- df_DavitaK_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Davita Kent 2018
#vector containing only the text
text <- df_DavitaK_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Starbucks 2018
#vector containing only the text
text <- df_Starbucks_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#McCormick 2018
#vector containing only the text
text <- df_McCormick_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#IHS Markit 2018
#vector containing only the text
text <- df_IHS_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#vector containing only the text
text <- df_AMD_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#ResMed 2016
#vector containing only the text
text <- df_ResMed_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#ResMed 2018
#vector containing only the text
text <- df_ResMed_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#CA 2016
#vector containing only the text
text <- df_CA_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#CA 2018
#vector containing only the text
text <- df_CA_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#GM 2016
#vector containing only the text
text <- df_GM_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#GM 2018
#vector containing only the text
text <- df_GM_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Aetna 2016
#vector containing only the text
text <- df_Aetna_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Aetna 2018
#vector containing only the text
text <- df_Aetna_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#NRG 2016
#vector containing only the text
text <- df_NRG_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#NRG 2018
#NRG 2016
#vector containing only the text
text <- df_NRG_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Medtronic 2016
#vector containing only the text
text <- df_Medtronic_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Medtronic 2018
#vector containing only the text
text <- df_Medtronic_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Juniper 2016
#vector containing only the text
text <- df_Juniper_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Juniper 2018
#vector containing only the text
text <- df_Juniper_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Aetna Ramon
#vector containing only the text
text <- df_AetnaR_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Netflix
#vector containing only the text
text <- df_Netflix_2016$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Disney
#vector containing only the text
text <- df_Disney_2018$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

#Fox 2015
#vector containing only the text
text <- df_Fox_2015$text
#corpus
docs <- Corpus(VectorSource(text))
docs <- docs %>%
tm_map(removeNumbers) %>%
tm_map(removePunctuation) %>%
tm_map(stripWhitespace)
Warning: transformation drops documentsWarning: transformation drops documentsWarning: transformation drops documents
docs <- tm_map(docs, content_transformer(tolower))
Warning: transformation drops documents
docs <- tm_map(docs, removeWords, stopwords("english"))
Warning: transformation drops documents
dtm <- TermDocumentMatrix(docs)
matrix <- as.matrix(dtm)
words <- sort(rowSums(matrix),decreasing=TRUE)
df_wc <- data.frame(word = names(words),freq=words)
wordcloud(words = df_wc$word, freq = df_wc$freq, min.freq = 1,max.words=200, random.order=FALSE, rot.per=0.35,colors=brewer.pal(8, "Dark2"))

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4KClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDbWQrU2hpZnQrRW50ZXIqLgoKYGBge3J9CnBsb3QoY2FycykKYGBgCgpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ21kK09wdGlvbitJKi4KCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ21kK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuCgpUaGUgcHJldmlldyBzaG93cyB5b3UgYSByZW5kZXJlZCBIVE1MIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBlZGl0b3IuIENvbnNlcXVlbnRseSwgdW5saWtlICpLbml0KiwgKlByZXZpZXcqIGRvZXMgbm90IHJ1biBhbnkgUiBjb2RlIGNodW5rcy4gSW5zdGVhZCwgdGhlIG91dHB1dCBvZiB0aGUgY2h1bmsgd2hlbiBpdCB3YXMgbGFzdCBydW4gaW4gdGhlIGVkaXRvciBpcyBkaXNwbGF5ZWQuCgpgYGB7cn0Kc2V0d2QoIi9Vc2Vycy9qYXlzaHJlZW5vaGFyL0Rvd25sb2FkcyIpCmBgYAoKIyNNZXJnZSBkYXRhc2V0cwoKYGBge3J9CiNKb2huc29uCiMyMDE2CiMgTWVyZ2UgZGF0YWZyYW1lcwpkZl9Kb2huc29uXzIwMTYgPC0gbWVyZ2UoSm9obnNvbl8yMDE2X1R3ZWV0c19DRU8sIEpvaG5zb25fc3BfMjAxNiwgYnkgPSJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSm9obnNvbl8yMDE2LCBmaWxlID0gIkpvaG5zb25fZGZfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTcKZGZfSm9obnNvbl8yMDE3IDwtIG1lcmdlKFR3ZWV0c18yMDE3X0pvaG5zb24sIEpvaG5zb25fc3BfMjAxNywgYnkgPSJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSm9obnNvbl8yMDE3LCBmaWxlID0gIkpvaG5zb25fZGZfMjAxNyIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfSm9obnNvbl8yMDE2CmBgYAoKYGBge3J9CmRmX0pvaG5zb25fMjAxNwpgYGAKCmBgYHtyfQojTmFzZGFxCiMyMDE3LTIwMTgKZGZfTkFTREFRIDwtIG1lcmdlKFR3ZWV0c19OYXNkYXEsIE5BU0RBUV9uZXcsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9OQVNEQVEsIGZpbGUgPSAiTmFzZGFxXzIwMTciLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX05BU0RBUQpgYGAKCmBgYHtyfQojQXV0b2Rlc2sKIzIwMTgKZGZfYXV0b2Rlc2sgPC0gbWVyZ2UoQXV0b2Rlc2tfVHdlZXRzLCBBdXRvZGVza19TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfYXV0b2Rlc2ssIGZpbGUgPSAiYXV0b2Rlc2tfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfYXV0b2Rlc2sKYGBgCgpgYGB7cn0KI0hhc2JybwojMjAxOApkZl9IYXNicm9fMjAxOCA8LSBtZXJnZShIYXNicm9fVHdlZXRzXzIwMTgsIEhhc2Jyb19TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSGFzYnJvXzIwMTgsIGZpbGUgPSAiSGFzYnJvXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE2CmRmX0hhc2Jyb18yMDE2IDwtIG1lcmdlKEhhc2Jyb19Ud2VldHNfMjAxNiwgSGFzYnJvX1NQXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9IYXNicm9fMjAxNiwgZmlsZSA9ICJIYXNicm9fMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfSGFzYnJvXzIwMTYKYGBgCgpgYGB7cn0KZGZfSGFzYnJvXzIwMTgKYGBgCgpgYGB7cn0KI0ludGVsCiMyMDE4CmRmX0ludGVsXzIwMTggPC0gbWVyZ2UoSW50ZWxfVHdlZXRzXzIwMTgsIEludGVsXzIwMThfU1AsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9JbnRlbF8yMDE4LCBmaWxlID0gIkludGVsXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE2CmRmX0ludGVsXzIwMTYgPC0gbWVyZ2UoSW50ZWxfVHdlZXRzXzIwMTYsIEludGVsXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9JbnRlbF8yMDE2LCBmaWxlID0gIkludGVsXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0ludGVsXzIwMTYKYGBgCgpgYGB7cn0KZGZfSW50ZWxfMjAxOApgYGAKCmBgYHtyfQojQWN0aXZpc2lvbgojMjAxNgpkZl9BY3RpdmlzaW9uXzIwMTYgPC0gbWVyZ2UoQWN0aXZpc2lvbl9Ud2VldHNfMjAxNiwgQWN0aXZpc2lvbl9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfQWN0aXZpc2lvbl8yMDE2LCBmaWxlID0gIkFjdGl2aXNpb25fMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfQWN0aXZpc2lvbl8yMDE4IDwtIG1lcmdlKEFjdGl2aXNpb25fVHdlZXRzXzIwMTgsIEFjdGl2aXNpb25fU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0FjdGl2aXNpb25fMjAxOCwgZmlsZSA9ICJBY3RpdmlzaW9uXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0FjdGl2aXNpb25fMjAxNgpgYGAKCmBgYHtyfQpkZl9BY3RpdmlzaW9uXzIwMTgKYGBgCgpgYGB7cn0KI0ludWl0IAojMjAxNgpkZl9JbnVpdF8yMDE2IDwtIG1lcmdlKFR3ZWV0c19JbnVpdF8yMDE2LCBJbnVpdF9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSW51aXRfMjAxNiwgZmlsZSA9ICJJbnR1aXRfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfSW51aXRfMjAxOCA8LSBtZXJnZShUd2VldHNfSW51aXRfMjAxOCwgSW50dWl0X1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9JbnVpdF8yMDE4LCBmaWxlID0gIkludHVpdF8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9JbnVpdF8yMDE2CmBgYAoKYGBge3J9CmRmX0ludWl0XzIwMTgKYGBgCgpgYGB7cn0KI0FsbGVyZ2FuIAojMjAxNgpkZl9BbGxlcmdhbl8yMDE2IDwtIG1lcmdlKEFsbGVyZ2FuX1R3ZWV0c18yMDE2LCBBbGxlcmdhbl9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfQWxsZXJnYW5fMjAxNiwgZmlsZSA9ICJBbGxlcmdhbl8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9BbGxlcmdhbl8yMDE4IDwtIG1lcmdlKEFsbGVyZ2FuX1R3ZWV0c18yMDE4LCBBbGxlcmdhbl9TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfQWxsZXJnYW5fMjAxOCwgZmlsZSA9ICJBbGxlcmdhbl8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9BbGxlcmdhbl8yMDE2CmBgYAoKYGBge3J9CmRmX0FsbGVyZ2FuXzIwMTgKYGBgCgpgYGB7cn0KI0h1bWFuYQojMjAxNgpkZl9IdW1hbmFfMjAxNiA8LSBtZXJnZShIdW1hbmFfVHdlZXRzXzIwMTYsIEh1bWFuYV9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSHVtYW5hXzIwMTYsIGZpbGUgPSAiSHVtYW5hXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX0h1bWFuYV8yMDE4IDwtIG1lcmdlKEh1bWFuYV8yMDE4X1R3ZWV0cywgSHVtYW5hX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9IdW1hbmFfMjAxOCwgZmlsZSA9ICJIdW1hbmFfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfSHVtYW5hXzIwMTYKYGBgCgpgYGB7cn0KZGZfSHVtYW5hXzIwMTgKYGBgCgpgYGB7cn0KI0F1dG9kZXNrX0NhcmxfQmFzcwojMjAxNgpkZl9DQl9hdXRvZGVza18yMDE2IDwtIG1lcmdlKEF1dG9kZXNrX0NCX3R3ZWV0c18yMDE2LCBBdXRvZGVza19DQl9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfQ0JfYXV0b2Rlc2tfMjAxNiwgZmlsZSA9ICJBdXRvZGVza19DQl8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9DQl9hdXRvZGVza18yMDE4IDwtIG1lcmdlKEF1dG9kZXNrX0NCX3R3ZWV0c18yMDE3LCBBdXRvZGVza18yMDE3X1NQX0NCLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfQ0JfYXV0b2Rlc2tfMjAxOCwgZmlsZSA9ICJBdXRvZGVza19DQl8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9DQl9hdXRvZGVza18yMDE2CmBgYAoKYGBge3J9CmRmX0NCX2F1dG9kZXNrXzIwMTgKYGBgCgpgYGB7cn0KI0VxdWlub3gKIzIwMTgKZGZfZXF1aW5veF8yMDE4IDwtIG1lcmdlKEVxdWlub3hfMjAxOF9Ud2VldHMsIEVxdWlub3hfMjAxOF9TUCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX2VxdWlub3hfMjAxOCwgZmlsZSA9ICJFcXVpbm94XzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKZGZfZXF1aW5veF8yMDE4CmBgYAoKYGBge3J9CiNDaXNjbwojMjAxNgpkZl9jaXNjb18yMDE2IDwtIG1lcmdlKENpc2NvX1R3ZWV0c18yMDE2LCBDaXNjb19TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfY2lzY29fMjAxNiwgZmlsZSA9ICJDaXNjb18yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9jaXNjb18yMDE4IDwtIG1lcmdlKENpc2NvX1R3ZWV0c18yMDE4LCBDaXNjb19TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfY2lzY29fMjAxOCwgZmlsZSA9ICJDaXNjb18yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9jaXNjb18yMDE2CmBgYAoKYGBge3J9CmRmX2Npc2NvXzIwMTgKYGBgCgpgYGB7cn0KI0VCQVkKIzIwMTYKZGZfRUJBWV8yMDE2IDwtbWVyZ2UoRUJBWV9Ud2VldHNfMjAxNiwgRUJBWV8yMDE2X1NQLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfRUJBWV8yMDE2LCBmaWxlID0gIkVCQVlfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfRUJBWV8yMDE4IDwtbWVyZ2UoRUJBWV9Ud2VldHNfMjAxOCwgRUJBWV9TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfRUJBWV8yMDE4LCBmaWxlID0gIkVCQVlfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfRUJBWV8yMDE2CmBgYAoKYGBge3J9CmRmX0VCQVlfMjAxOApgYGAKCmBgYHtyfQojRGF2aXRhCiMyMDE2CmRmX0Rhdml0YV8yMDE2IDwtbWVyZ2UoVHdlZXRzX0Rhdml0YV8yMDE2LCBEYXZpdGFfU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0Rhdml0YV8yMDE2LCBmaWxlID0gIkRhdml0YV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxNwpkZl9EYXZpdGFfMjAxNyA8LW1lcmdlKERhdml0YV9JbmNfVHdlZXRzXzIwMTcsIERhdml0YV9TUF8yMDE3LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfRGF2aXRhXzIwMTcsIGZpbGUgPSAiRGF2aXRhXzIwMTciLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0Rhdml0YV8yMDE2CmBgYAoKYGBge3J9CmRmX0Rhdml0YV8yMDE3CmBgYAoKYGBge3J9CiNJbGx1bWluYSAKIzIwMTYKZGZfSWxsdW1pbmFfMjAxNiA8LW1lcmdlKElsbHVtaW5hX1R3ZWV0c18yMDE2LCBJbGx1bWluYV9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSWxsdW1pbmFfMjAxNiwgZmlsZSA9ICJJbGx1bWluYV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9JbGx1bWluYV8yMDE4IDwtbWVyZ2UoSWxsdW1pbmFfVHdlZXRzXzIwMTdfMjAxOCwgSWxsdW1pbmFfMjAxN18yMDE4X1NQLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSWxsdW1pbmFfMjAxOCwgZmlsZSA9ICJJbGx1bWluYV8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9JbGx1bWluYV8yMDE2CmBgYAoKYGBge3J9CmRmX0lsbHVtaW5hXzIwMTgKYGBgCgpgYGB7cn0KI0hvbWVEZXBvdAojMjAxMy0yMDE0CmRmX0hvbWVkZXBvdF8yMDEzIDwtbWVyZ2UoSG9tZV9kZXBvdF90d2VldHNfMjAxMyxIb21lX0RlcG90X1NQLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSG9tZWRlcG90XzIwMTMsIGZpbGUgPSAiSG9tZWRlcG90XzIwMTMiLCByb3cubmFtZXMgPSBUUlVFKQpkZl9Ib21lZGVwb3RfMjAxMwpgYGAKCmBgYHtyfQojU291dGh3ZXN0X0FpcmxpbmVzCiMyMDE2CmRmX1NvdXRod2VzdF8yMDE2IDwtbWVyZ2UoU291dGh3ZXN0X1R3ZWV0c18yMDE2LFNvdXRod2VzdF9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfU291dGh3ZXN0XzIwMTYsIGZpbGUgPSAiU291dGh3ZXN0XzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCgojMjAxOApkZl9Tb3V0aHdlc3RfMjAxOCA8LW1lcmdlKFNvdXRod2VzdF9Ud2VldHNfMjAxOCxTb3V0aHdlc3RfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX1NvdXRod2VzdF8yMDE4LCBmaWxlID0gIlNvdXRod2VzdF8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCmRmX1NvdXRod2VzdF8yMDE2CmBgYAoKYGBge3J9CmRmX1NvdXRod2VzdF8yMDE4CmBgYAoKYGBge3J9CiNGSVMKIzIwMTYKZGZfRklTXzIwMTYgPC1tZXJnZShGSVNfVHdlZXRzXzIwMTYsIEZJU18yMDE2X1NQLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfRklTXzIwMTYsIGZpbGUgPSAiRklTXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX0ZJU18yMDE4IDwtbWVyZ2UoRklTX1R3ZWV0c18yMDE4LCBGSVNfMjAxOF9TUCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0ZJU18yMDE4LCBmaWxlID0gIkZJU18yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCmRmX0ZJU18yMDE2CmBgYAoKYGBge3J9CmRmX0ZJU18yMDE4CmBgYAoKYGBge3J9CiNMZXVjYWRpYV9OYXRpb24KIzIwMTYKZGZfTGV1Y2FkaWFfMjAxNiA8LW1lcmdlKExldWNhZGlhX1R3ZWV0c18yMDE2LCBMZXVjYWRpYV9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfTGV1Y2FkaWFfMjAxNiwgZmlsZSA9ICJMZXVjYWRpYV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9MZXVjYWRpYV8yMDE4IDwtbWVyZ2UoTGV1Y2FkaWFfMjAxOF9Ud2VldHMsIExldWNhZGlhX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9MZXVjYWRpYV8yMDE4LCBmaWxlID0gIkxldWNhZGlhXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0xldWNhZGlhXzIwMTYKYGBgCgpgYGB7cn0KZGZfTGV1Y2FkaWFfMjAxOApgYGAKCmBgYHtyfQojVmVyaXpvbgojMjAxOApkZl9WZXJpem9uXzIwMTggPC0gbWVyZ2UoVmVyaXpvbl9Ud2VldHNfMjAxOCwgVmVyaXpvbl9TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfVmVyaXpvbl8yMDE4LCBmaWxlID0gIlZlcml6b25fMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfVmVyaXpvbl8yMDE4CmBgYAoKYGBge3J9CiNXZXN0ZXJuIFVuaW9uIAojMjAxOApkZl9XVV8yMDE4IDwtIG1lcmdlKFdlc3Rlcm5fVW5pb25fVHdlZXRzXzIwMTgsIFdVX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9XVV8yMDE4LCBmaWxlID0gIldVXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE2CmRmX1dVXzIwMTYgPC0gbWVyZ2UoV2VzdGVybl9Vbmlvbl9Ud2VldHNfMjAxNiwgV1VfU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX1dVXzIwMTYsIGZpbGUgPSAiV1VfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfV1VfMjAxNgpgYGAKCmBgYHtyfQpkZl9XVV8yMDE4CmBgYAoKYGBge3J9CiNSZWRfSGF0CiMyMDE2CmRmX1JlZEhhdF8yMDE2IDwtIG1lcmdlKFJlZF9IYXRfVHdlZXRzXzIwMTYsIFJlZF9IYXRfU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX1JlZEhhdF8yMDE2LCBmaWxlID0gIlJlZEhhdF8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9SZWRIYXRfMjAxOCA8LSBtZXJnZShSZWRfSGF0X1R3ZWV0c18yMDE4LCBSZWRfSGF0X1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9SZWRIYXRfMjAxOCwgZmlsZSA9ICJSZWRIYXRfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfUmVkSGF0XzIwMTYKYGBgCgpgYGB7cn0KZGZfUmVkSGF0XzIwMTgKYGBgCgpgYGB7cn0KI0FNWk4KIzIwMTYKZGZfQU1aTl8yMDE2IDwtIG1lcmdlKEFNWk5fVHdlZXRzXzIwMTYsIEFNWk5fU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0FNWk5fMjAxNiwgZmlsZSA9ICJBTVpOXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX0FNWk5fMjAxOCA8LSBtZXJnZShBTVpOX1R3ZWV0c18yMDE4LCBBTVpOX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9BTVpOXzIwMTgsIGZpbGUgPSAiQU1aTl8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9BTVpOXzIwMTYKYGBgCgpgYGB7cn0KZGZfQU1aTl8yMDE4CmBgYAoKYGBge3J9CiNHRQojMjAxNgpkZl9HRV8yMDE2IDwtIG1lcmdlKEdFX1R3ZWV0c18yMDE2LCBHRV8yMDE2X1NQLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfR0VfMjAxNiwgZmlsZSA9ICJHRV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgoKIzIwMTcKZGZfR0VfMjAxNyA8LSBtZXJnZShHRV9Ud2VldHNfMjAxNywgR0VfMjAxN19TUCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0dFXzIwMTcsIGZpbGUgPSAiR0VfMjAxNyIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfR0VfMjAxNgpgYGAKCmBgYHtyfQpkZl9HRV8yMDE3CmBgYAoKYGBge3J9CiNGaXNlcnYKIzIwMTYKZGZfRmlzZXJ2XzIwMTYgPC0gbWVyZ2UoRmlzZXJ2X1R3ZWV0c18yMDE2LCBGaXNlcnZfU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0Zpc2Vydl8yMDE2LCBmaWxlID0gIkZpc2Vydl8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9GaXNlcnZfMjAxOCA8LSBtZXJnZShGaXNlcnZfVHdlZXRzXzIwMTgsIEZpc2Vydl9TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfRmlzZXJ2XzIwMTgsIGZpbGUgPSAiRmlzZXJ2XzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0Zpc2Vydl8yMDE2CmBgYAoKYGBge3J9CmRmX0Zpc2Vydl8yMDE4CmBgYAoKYGBge3J9CiNXYXN0ZV9NYW5hZ2VtZW50CiMyMDE4CmRmX1dNXzIwMTggPC0gbWVyZ2UoV01fVHdlZXRzXzIwMTgsIFdNX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl9XTV8yMDE4LCBmaWxlID0gIldNXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKZGZfV01fMjAxOApgYGAKCmBgYHtyfQojV2lsbHNfVG93ZXIKIzIwMTYKZGZfV2lsbHNfMjAxNiA8LSBtZXJnZShXaWxsc19Ub3dlcl9Ud2VldHNfMjAxNiwgV2lsbHNfVG93ZXJfU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX1dpbGxzXzIwMTYsIGZpbGUgPSAiV2lsbHNfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfV2lsbHNfMjAxOCA8LSBtZXJnZShXaWxsc19Ub3dlcl9Ud2VldHNfMjAxOCwgV0xUV19TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfV2lsbHNfMjAxOCwgZmlsZSA9ICJXaWxsc18yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9XaWxsc18yMDE2CmBgYAoKYGBge3J9CmRmX1dpbGxzXzIwMTgKYGBgCgpgYGB7cn0KI1RyaXBhZHZpc29yCiMyMDE2CmRmX3RyaXBhZHZpc29yXzIwMTYgPC0gbWVyZ2UoVHJpcGFkdmlzb3JfVHdlZXRzXzIwMTYsIFRyaXBhZHZpc29yX1NQXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl90cmlwYWR2aXNvcl8yMDE2LCBmaWxlID0gIlRyaXBhZHZpc29yXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX3RyaXBhZHZpc29yXzIwMTggPC0gbWVyZ2UoVHJpcGFkdmlzb3JfVHdlZXRzXzIwMTgsIFRyaXBhZHZpc29yX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpCndyaXRlLmNzdihkZl90cmlwYWR2aXNvcl8yMDE4LCBmaWxlID0gIlRyaXBhZHZpc29yXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX3RyaXBhZHZpc29yXzIwMTYKYGBgCgpgYGB7cn0KZGZfdHJpcGFkdmlzb3JfMjAxOApgYGAKCmBgYHtyfQojRGF2aXRhX0tlbnQKIzIwMTYKZGZfRGF2aXRhS18yMDE2IDwtIG1lcmdlKERhdml0YV9Ud2VldHNfMjAxNkssIERhdml0YV9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfRGF2aXRhS18yMDE2LCBmaWxlID0gIkRhdml0YV9LXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX0Rhdml0YUtfMjAxOCA8LSBtZXJnZShEYXZpdGFfVHdlZXRzXzIwMThLLCBEYXZpdGFfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0Rhdml0YUtfMjAxOCwgZmlsZSA9ICJEYXZpdGFfS18yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9EYXZpdGFLXzIwMTYKYGBgCgpgYGB7cn0KZGZfRGF2aXRhS18yMDE4CmBgYAoKYGBge3J9CiNTdGFyYnVja3MKZGZfU3RhcmJ1Y2tzXzIwMTggPC0gbWVyZ2UoU3RhcmJ1Y2tzX1R3ZWV0c18yMDE4LCBTdGFyYnVja3NfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX1N0YXJidWNrc18yMDE4LCBmaWxlID0gIlN0YXJidWNrc18yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9TdGFyYnVja3NfMjAxOApgYGAKCmBgYHtyfQojTWNDb3JtaWNrIAojMjAxOApkZl9NY0Nvcm1pY2tfMjAxOCA8LSBtZXJnZShNY0Nvcm1pY2tfVHdlZXRzXzIwMTgsIE1jQ29ybWlja19TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfTWNDb3JtaWNrXzIwMTgsIGZpbGUgPSAiTWNDb3JtaWNrXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX01jQ29ybWlja18yMDE4CmBgYAoKYGBge3J9CiNJSFMgTWFya2l0IAojMjAxOApkZl9JSFNfMjAxOCA8LSBtZXJnZShJSFNfVHdlZXRzXzIwMTgsIElIU19TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKQp3cml0ZS5jc3YoZGZfSUhTXzIwMTgsIGZpbGUgPSAiSUhTXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0lIU18yMDE4CmBgYAoKYGBge3J9CiNBTUQKIzIwMTgKZGZfQU1EXzIwMTggPC0gbWVyZ2UoQU1EX1R3ZWV0c18yMDE4LCBBTURfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkKd3JpdGUuY3N2KGRmX0FNRF8yMDE4LCBmaWxlID0gIkFNRF8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9BTURfMjAxOApgYGAKCmBgYHtyfQojUmVzTWVkCiMyMDE2CmRmX1Jlc01lZF8yMDE2IDwtbWVyZ2UoUmVzTWVkX1R3ZWV0c18yMDE2LCBSZXNNZWRfU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9SZXNNZWRfMjAxNiwgZmlsZSA9ICJSZXNNZWRfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfUmVzTWVkXzIwMTggPC1tZXJnZShSZXNNZWRfVHdlZXRzXzIwMTgsIFJlc01lZF9TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX1Jlc01lZF8yMDE4LCBmaWxlID0gIlJlc01lZF8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9SZXNNZWRfMjAxNgpgYGAKCmBgYHtyfQpkZl9SZXNNZWRfMjAxOApgYGAKCmBgYHtyfQojQ0EKIzIwMTYKZGZfQ0FfMjAxNiA8LW1lcmdlKENBX1R3ZWV0c18yMDE2LCBDQV9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0NBXzIwMTYsIGZpbGUgPSAiQ0FfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfQ0FfMjAxOCA8LW1lcmdlKENBX1R3ZWV0c18yMDE4LCBDQV9TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0NBXzIwMTgsIGZpbGUgPSAiQ0FfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfQ0FfMjAxNgpgYGAKCmBgYHtyfQpkZl9DQV8yMDE4CmBgYAoKYGBge3J9CiNHZW5lcmFsX01vdG9ycwojMjAxNgpkZl9HTV8yMDE2IDwtbWVyZ2UoR01fVHdlZXRzXzIwMTYsIEdNX1NQXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfR01fMjAxNiwgZmlsZSA9ICJHTV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9HTV8yMDE4IDwtbWVyZ2UoR01fVHdlZXRzXzIwMTgsIEdNX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfR01fMjAxOCwgZmlsZSA9ICJHTV8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9HTV8yMDE2CmBgYAoKYGBge3J9CmRmX0dNXzIwMTgKYGBgCgpgYGB7cn0KI0FldG5hCiMyMDE2CmRmX0FldG5hXzIwMTYgPC1tZXJnZShBZXRuYV9Ud2VldHNfMjAxNiwgQUVUX1NQXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfQWV0bmFfMjAxNiwgZmlsZSA9ICJBZXRuYV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9BZXRuYV8yMDE4IDwtbWVyZ2UoQWV0bmFfVHdlZXRzXzIwMTgsIEFldG5hX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfQWV0bmFfMjAxOCwgZmlsZSA9ICJBZXRuYV8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9BZXRuYV8yMDE2CmBgYAoKYGBge3J9CmRmX0FldG5hXzIwMTgKYGBgCgpgYGB7cn0KI05SRwojMjAxNgpkZl9OUkdfMjAxNiA8LW1lcmdlKE5SR19Ud2VldHNfMjAxNiwgTlJHX1NQXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfTlJHXzIwMTYsIGZpbGUgPSAiTlJHXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX05SR18yMDE4IDwtbWVyZ2UoTlJHX1R3ZWV0c18yMDE4LCBOUkdfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9OUkdfMjAxOCwgZmlsZSA9ICJOUkdfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfTlJHXzIwMTYKYGBgCgpgYGB7cn0KZGZfTlJHXzIwMTgKYGBgCgpgYGB7cn0KI01lZHRyb25pYwojMjAxNgpkZl9NZWR0cm9uaWNfMjAxNiA8LW1lcmdlKE1lZHRyb25pY19Ud2VldHNfMjAxNiwgTWVkdHJvbmljX1NQXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfTWVkdHJvbmljXzIwMTYsIGZpbGUgPSAiTWVkdHJvbmljXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX01lZHRyb25pY18yMDE4IDwtbWVyZ2UoTWVkdHJvbmljX1R3ZWV0c18yMDE4LCBNZWR0cm9uaWNfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9NZWR0cm9uaWNfMjAxOCwgZmlsZSA9ICJNZWR0cm9uaWNfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfTWVkdHJvbmljXzIwMTYKYGBgCgpgYGB7cn0KZGZfTWVkdHJvbmljXzIwMTgKYGBgCgpgYGB7cn0KI0p1bmlwZXIKIzIwMTYKZGZfSnVuaXBlcl8yMDE2IDwtbWVyZ2UoSnVuaXBlcl9Ud2VldHNfMjAxNiwgSnVuaXBlcl9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0p1bmlwZXJfMjAxNiwgZmlsZSA9ICJKdW5pcGVyXzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCiMyMDE4CmRmX0p1bmlwZXJfMjAxOCA8LW1lcmdlKEp1bmlwZXJfVHdlZXRzXzIwMTgsIEp1bmlwZXJfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9KdW5pcGVyXzIwMTgsIGZpbGUgPSAiSnVuaXBlcl8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9KdW5pcGVyXzIwMTYKYGBgCgpgYGB7cn0KZGZfSnVuaXBlcl8yMDE4CmBgYAoKYGBge3J9CiNBZXRuYV9SYW1vbl8yMDE4CiMyMDE4CmRmX0FldG5hUl8yMDE4IDwtbWVyZ2UoQWV0bmFfVHdlZXRzXzIwMThSLCBBZXRuYVJfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9BZXRuYVJfMjAxOCwgZmlsZSA9ICJBZXRuYVJfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfQWV0bmFSXzIwMTgKYGBgCgpgYGB7cn0KI05ldGZsaXgKIzIwMTYKZGZfTmV0ZmxpeF8yMDE2IDwtbWVyZ2UoTmV0ZmxpeF9Ud2VldHNfMjAxNiwgTmV0ZmxpeF9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX05ldGZsaXhfMjAxNiwgZmlsZSA9ICJOZXRmbGl4XzIwMTYiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX05ldGZsaXhfMjAxNgpgYGAKCmBgYHtyfQojRGlzbmV5CmRmX0Rpc25leV8yMDE4IDwtbWVyZ2UoRGlzbmV5X1R3ZWV0c18yMDE4LCBEaXNuZXlfU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9EaXNuZXlfMjAxOCwgZmlsZSA9ICJEaXNuZXlfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfRGlzbmV5XzIwMTgKYGBgCgpgYGB7cn0KI0ZPWAojMjAxNQpkZl9Gb3hfMjAxNSA8LW1lcmdlKEZveF9Ud2VldHNfMjAxNSwgRm94X1NQXzIwMTUsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfRm94XzIwMTUsIGZpbGUgPSAiRm94XzIwMTUiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0ZveF8yMDE1CmBgYAoKYGBge3J9CiNNaWNyb3NvZnQKIzIwMTYKZGZfTWljcm9zb2Z0XzIwMTYgPC1tZXJnZShNaWNyb3NvZnRfVHdlZXRzXzIwMTYsIE1pY3Jvc29mdF9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX01pY3Jvc29mdF8yMDE2LCBmaWxlID0gIk1pY3Jvc29mdF8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9NaWNyb3NvZnRfMjAxOCA8LW1lcmdlKE1pY3Jvc29mdF9Ud2VldHNfMjAxOCwgTWljcm9zb2Z0X1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfTWljcm9zb2Z0XzIwMTgsIGZpbGUgPSAiTWljcm9zb2Z0XzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX01pY3Jvc29mdF8yMDE2CmBgYAoKYGBge3J9CmRmX01pY3Jvc29mdF8yMDE4CmBgYAoKYGBge3J9CiNKdW5pcGVyX1NoYXlnYW4KIzIwMTQKZGZfSnVuaXBlcl9TXzIwMTQgPC1tZXJnZShKdW5pcGVyU19Ud2VldHNfMjAxNCwgSnVuaXBlcl9TUF8yMDE0LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0p1bmlwZXJfU18yMDE0LCBmaWxlID0gIkp1bmlwZXJfU18yMDE0Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgoKZGZfSnVuaXBlcl9TXzIwMTQKCmBgYAoKYGBge3J9CmRmX0p1bmlwZXJfU18yMDE2CmBgYAoKYGBge3J9CiNTeW5jaHJvbnkgRmluYW5jaWFsIAojMjAxNgpkZl9TWUZNXzIwMTYgPC1tZXJnZShTWUZNX1R3ZWV0c18yMDE2LCBTWUZfU1BfMjAxNiwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9TWUZNXzIwMTYsIGZpbGUgPSAiU1lGTV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9TWUZNXzIwMTggPC1tZXJnZShTWUZNX1R3ZWV0c18yMDE4LCBTWUZNX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfU1lGTV8yMDE4LCBmaWxlID0gIlNZRk1fMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfU1lGTV8yMDE2CmBgYAoKYGBge3J9CmRmX1NZRk1fMjAxOApgYGAKCmBgYHtyfQojU291dGhlcm4gQ29tcGFueQojMjAxNgpkZl9Tb3V0aGVybl8yMDE2IDwtbWVyZ2UoU291dGhlcm5DX1R3ZWV0c18yMDE2LCBTT19TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX1NvdXRoZXJuXzIwMTYsIGZpbGUgPSAiU291dGhlcm5fMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfU291dGhlcm5fMjAxOCA8LW1lcmdlKFNvdXRoZXJuQ19Ud2VldHNfMjAxOCwgU09fU1BfMjAxOCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9Tb3V0aGVybl8yMDE4LCBmaWxlID0gIlNvdXRoZXJuXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX1NvdXRoZXJuXzIwMTYKYGBgCgpgYGB7cn0KZGZfU291dGhlcm5fMjAxOApgYGAKCmBgYHtyfQojQXBwbGUKIzIwMTYKZGZfQXBwbGVfMjAxNiA8LW1lcmdlKEFwcGxlX1R3ZWV0c18yMDE2LCBBcHBsZV9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0FwcGxlXzIwMTYsIGZpbGUgPSAiQXBwbGVfMjAxNiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKIzIwMTgKZGZfQXBwbGVfMjAxOCA8LW1lcmdlKEFwcGxlX1R3ZWV0c18yMDE4LCBBcHBsZV9TUF8yMDE4LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0FwcGxlXzIwMTgsIGZpbGUgPSAiQXBwbGVfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfQXBwbGVfMjAxNgpgYGAKCmBgYHtyfQpkZl9BcHBsZV8yMDE4CmBgYAoKYGBge3J9CiNYTAojMjAxNgpkZl9YTF8yMDE2IDwtbWVyZ2UoWExfVHdlZXRzXzIwMTYsIFhMX1NQXzIwMTYsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfWExfMjAxNiwgZmlsZSA9ICJYTF8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9YTF8yMDE4IDwtbWVyZ2UoWExfVHdlZXRzXzIwMTgsIFhMX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfWExfMjAxOCwgZmlsZSA9ICJYTF8yMDE4Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9YTF8yMDE2CmBgYAoKYGBge3J9CmRmX1hMXzIwMTgKYGBgCgpgYGB7cn0KI1R5c29uZm9vZHMKIzIwMTYKZGZfVHlzb25mXzIwMTYgPC1tZXJnZShUU05fVHdlZXRzXzIwMTYsIFRTTl9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX1R5c29uZl8yMDE2LCBmaWxlID0gIlRTTl8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9UeXNvbmZfMjAxOCA8LW1lcmdlKFRTTl9Ud2VldHNfMjAxOCwgVFNOX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfVHlzb25mXzIwMTgsIGZpbGUgPSAiVFNOXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX1R5c29uZl8yMDE2CmBgYAoKYGBge3J9CmRmX1R5c29uZl8yMDE4CmBgYAoKYGBge3J9CiNBa2FtYWkKIzIwMTYKZGZfQWthbWFpXzIwMTYgPC1tZXJnZShBa2FtYWlfVHdlZXRzXzIwMTYsIEFrYW1haV9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0FrYW1haV8yMDE2LCBmaWxlID0gIkFrYW1haV8yMDE2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgojMjAxOApkZl9Ba2FtYWlfMjAxOCA8LW1lcmdlKEFrYW1haV9Ud2VldHNfMjAxOCwgQWthbWFpX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfQWthbWFpXzIwMTgsIGZpbGUgPSAiQWthbWFpXzIwMTgiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0FrYW1haV8yMDE2CmBgYAoKYGBge3J9CmRmX0FrYW1haV8yMDE4CmBgYAoKIyMjQ2xlYW4KCmBgYHtyfQojUGFja2FnZXMKbGlicmFyeSh0bSkKbGlicmFyeShzdHJpbmdyKQppbnN0YWxsLnBhY2thZ2VzKCJ0ZXh0c3RlbSIpCmxpYnJhcnkoInRleHRzdGVtIikKCgoKCmBgYAoKYGBge3J9CiNGdW5jdGlvbiB0byBjbGVhbiB0aGUgdHdlZXRzCmNsZWFuX3R3ZWV0cyA8LSBmdW5jdGlvbih0d2VldHMpIHsKICAKICAjIENvbnZlcnQgdGV4dCB0byBsb3dlciBjYXNlCiAgdHdlZXRzIDwtIHRvbG93ZXIodHdlZXRzKQogIAogICMgUmVtb3ZlIFVSTHMKICB0d2VldHMgPC0gc3RyaW5ncjo6c3RyX3JlcGxhY2VfYWxsKHR3ZWV0cywgImh0dHBbXls6c3BhY2U6XV0qIiwgIiIpCiAgCiAgIyBSZW1vdmUgbWVudGlvbnMKICB0d2VldHMgPC0gc3RyaW5ncjo6c3RyX3JlcGxhY2VfYWxsKHR3ZWV0cywgIkBbXls6c3BhY2U6XV0qIiwgIiIpCiAgCiAgIyBSZW1vdmUgaGFzaHRhZ3MKICB0d2VldHMgPC0gc3RyaW5ncjo6c3RyX3JlcGxhY2VfYWxsKHR3ZWV0cywgIiNbXls6c3BhY2U6XV0qIiwgIiIpCiAgCiAgIyBSZW1vdmUgcHVuY3R1YXRpb24gbWFya3MKICB0d2VldHMgPC0gc3RyaW5ncjo6c3RyX3JlcGxhY2VfYWxsKHR3ZWV0cywgIltbOnB1bmN0Ol1dIiwgIiIpCiAgCiAgIyBSZW1vdmUgbnVtYmVycwogIHR3ZWV0cyA8LSBzdHJpbmdyOjpzdHJfcmVwbGFjZV9hbGwodHdlZXRzLCAiW1s6ZGlnaXQ6XV0iLCAiIikKICAKICAjIFJlbW92ZSBjb21tb24gc3RvcCB3b3JkcwogIHR3ZWV0cyA8LSB0bTo6cmVtb3ZlV29yZHModHdlZXRzLCB0bTo6c3RvcHdvcmRzKCJlbiIpKQogIAogIAogIHJldHVybih0d2VldHMpCn0KCmRmX1Rlc3QkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfVGVzdCR0ZXh0KQoKYGBgCgpgYGB7cn0KI0xlbW1hdGl6ZQpkZl9UZXN0JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1Rlc3QkdGV4dCkKCgpgYGAKCiNOdW1lcmljIE5BIHZhbHVlcyAmIFR3ZWV0cyAKCmBgYHtyfQojSm9obnNvbgojUmVtb3ZlIGNvbHVtbnMgCmRmX0pvaG5zb25fMjAxNiA8LSBkZl9Kb2huc29uXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0pvaG5zb25fMjAxNgoKI1RpY2tlciAKZGZfSm9obnNvbl8yMDE2JFRJQ0tFUltpcy5uYShkZl9Kb2huc29uXzIwMTYkVElDS0VSKV0gPC0gIkpDSSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0pvaG5zb25fMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSm9obnNvbl8yMDE2JFBSQ1tpcy5uYShkZl9Kb2huc29uXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSm9obnNvbl8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9Kb2huc29uXzIwMTYkVk9MW2lzLm5hKGRmX0pvaG5zb25fMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0pvaG5zb25fMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSm9obnNvbl8yMDE2JEJJRFtpcy5uYShkZl9Kb2huc29uXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9Kb2huc29uXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0pvaG5zb25fMjAxNiRBU0tbaXMubmEoZGZfSm9obnNvbl8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSm9obnNvbl8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSm9obnNvbl8yMDE2JE9QRU5QUkNbaXMubmEoZGZfSm9obnNvbl8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSm9obnNvbl8yMDE2CmBgYAoKCmBgYHtyfQpkZl9Kb2huc29uXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSm9obnNvbl8yMDE2JHRleHQpCmRmX0pvaG5zb25fMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9Kb2huc29uXzIwMTYkdGV4dCkKYGBgCgoKYGBge3J9CmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfSm9obnNvbl8yMDE3IDwtIGRmX0pvaG5zb25fMjAxN1ssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSm9obnNvbl8yMDE3CgojVGlja2VyIApkZl9Kb2huc29uXzIwMTckVElDS0VSW2lzLm5hKGRmX0pvaG5zb25fMjAxNyRUSUNLRVIpXSA8LSAiSkNJIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfSm9obnNvbl8yMDE3JFBSQywgbmEucm0gPSBUUlVFKQpkZl9Kb2huc29uXzIwMTckUFJDW2lzLm5hKGRmX0pvaG5zb25fMjAxNyRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9Kb2huc29uXzIwMTckVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0pvaG5zb25fMjAxNyRWT0xbaXMubmEoZGZfSm9obnNvbl8yMDE3JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfSm9obnNvbl8yMDE3JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9Kb2huc29uXzIwMTckQklEW2lzLm5hKGRmX0pvaG5zb25fMjAxNyRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0pvaG5zb25fMjAxNyRBU0ssIG5hLnJtID0gVFJVRSkKZGZfSm9obnNvbl8yMDE3JEFTS1tpcy5uYShkZl9Kb2huc29uXzIwMTckQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9Kb2huc29uXzIwMTckT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9Kb2huc29uXzIwMTckT1BFTlBSQ1tpcy5uYShkZl9Kb2huc29uXzIwMTckT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9Kb2huc29uXzIwMTcKYGBgCmBgYHtyfQpkZl9Kb2huc29uXzIwMTckdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSm9obnNvbl8yMDE3JHRleHQpCmRmX0pvaG5zb25fMjAxNyR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9Kb2huc29uXzIwMTckdGV4dCkKYGBgCgpgYGB7cn0KI05BU0RBUQojUmVtb3ZlIGNvbHVtbnMgCmRmX05BU0RBUSA8LSBkZl9OQVNEQVFbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX05BU0RBUQoKI1RpY2tlciAKZGZfTkFTREFRJFRJQ0tFUltpcy5uYShkZl9OQVNEQVEkVElDS0VSKV0gPC0gIk5EQVEiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9OQVNEQVEkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX05BU0RBUSRQUkNbaXMubmEoZGZfTkFTREFRJFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX05BU0RBUSRWT0wsIG5hLnJtID0gVFJVRSkKZGZfTkFTREFRJFZPTFtpcy5uYShkZl9OQVNEQVEkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9OQVNEQVEkQklELCBuYS5ybSA9IFRSVUUpCmRmX05BU0RBUSRCSURbaXMubmEoZGZfTkFTREFRJEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfTkFTREFRJEFTSywgbmEucm0gPSBUUlVFKQpkZl9OQVNEQVEkQVNLW2lzLm5hKGRmX05BU0RBUSRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX05BU0RBUSRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX05BU0RBUSRPUEVOUFJDW2lzLm5hKGRmX05BU0RBUSRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX05BU0RBUQpgYGAKYGBge3J9CmRmX05BU0RBUSR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9OQVNEQVEkdGV4dCkKZGZfTkFTREFRJHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX05BU0RBUSR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojQXV0b2Rlc2sKI1JlbW92ZSBjb2x1bW5zIApkZl9hdXRvZGVzayA8LSBkZl9hdXRvZGVza1ssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfYXV0b2Rlc2sKCiNUaWNrZXIgCmRmX2F1dG9kZXNrJFRJQ0tFUltpcy5uYShkZl9hdXRvZGVzayRUSUNLRVIpXSA8LSAiQURTSyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX2F1dG9kZXNrJFBSQywgbmEucm0gPSBUUlVFKQpkZl9hdXRvZGVzayRQUkNbaXMubmEoZGZfYXV0b2Rlc2skUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfYXV0b2Rlc2skVk9MLCBuYS5ybSA9IFRSVUUpCmRmX2F1dG9kZXNrJFZPTFtpcy5uYShkZl9hdXRvZGVzayRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX2F1dG9kZXNrJEJJRCwgbmEucm0gPSBUUlVFKQpkZl9hdXRvZGVzayRCSURbaXMubmEoZGZfYXV0b2Rlc2skQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9hdXRvZGVzayRBU0ssIG5hLnJtID0gVFJVRSkKZGZfYXV0b2Rlc2skQVNLW2lzLm5hKGRmX2F1dG9kZXNrJEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfYXV0b2Rlc2skT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9hdXRvZGVzayRPUEVOUFJDW2lzLm5hKGRmX2F1dG9kZXNrJE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfYXV0b2Rlc2sKYGBgICAgICAgICAgICAKYGBge3J9CmRmX2F1dG9kZXNrJHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX2F1dG9kZXNrJHRleHQpCmRmX2F1dG9kZXNrJHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX2F1dG9kZXNrJHRleHQpCmBgYAoKYGBge3J9CiNIYXNicm8gCiNSZW1vdmUgY29sdW1ucyAKZGZfSGFzYnJvXzIwMTYgPC0gZGZfSGFzYnJvXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0hhc2Jyb18yMDE2IAoKI1RpY2tlciAKZGZfSGFzYnJvXzIwMTYkVElDS0VSW2lzLm5hKGRmX0hhc2Jyb18yMDE2JFRJQ0tFUildIDwtICJIQVMiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9IYXNicm9fMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSGFzYnJvXzIwMTYkUFJDW2lzLm5hKGRmX0hhc2Jyb18yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0hhc2Jyb18yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9IYXNicm9fMjAxNiRWT0xbaXMubmEoZGZfSGFzYnJvXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9IYXNicm9fMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSGFzYnJvXzIwMTYkQklEW2lzLm5hKGRmX0hhc2Jyb18yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfSGFzYnJvXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0hhc2Jyb18yMDE2JEFTS1tpcy5uYShkZl9IYXNicm9fMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0hhc2Jyb18yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSGFzYnJvXzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9IYXNicm9fMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0hhc2Jyb18yMDE2CmBgYApgYGB7cn0KZGZfSGFzYnJvXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSGFzYnJvXzIwMTYkdGV4dCkKZGZfSGFzYnJvXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSGFzYnJvXzIwMTYkdGV4dCkKYGBgCgpgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9IYXNicm9fMjAxOCA8LSBkZl9IYXNicm9fMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSGFzYnJvXzIwMTggCgojVGlja2VyIApkZl9IYXNicm9fMjAxOCRUSUNLRVJbaXMubmEoZGZfSGFzYnJvXzIwMTgkVElDS0VSKV0gPC0gIkhBUyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0hhc2Jyb18yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9IYXNicm9fMjAxOCRQUkNbaXMubmEoZGZfSGFzYnJvXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSGFzYnJvXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0hhc2Jyb18yMDE4JFZPTFtpcy5uYShkZl9IYXNicm9fMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0hhc2Jyb18yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9IYXNicm9fMjAxOCRCSURbaXMubmEoZGZfSGFzYnJvXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9IYXNicm9fMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfSGFzYnJvXzIwMTgkQVNLW2lzLm5hKGRmX0hhc2Jyb18yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSGFzYnJvXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9IYXNicm9fMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0hhc2Jyb18yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSGFzYnJvXzIwMTgKYGBgCgoKYGBge3J9CmRmX0hhc2Jyb18yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0hhc2Jyb18yMDE4JHRleHQpCmRmX0hhc2Jyb18yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0hhc2Jyb18yMDE4JHRleHQpCmBgYApgYGB7cn0KI0ludGVsIAojUmVtb3ZlIGNvbHVtbnMgCmRmX0ludGVsXzIwMTYgPC0gZGZfSW50ZWxfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSW50ZWxfMjAxNiAKCiNUaWNrZXIgCmRmX0ludGVsXzIwMTYkVElDS0VSW2lzLm5hKGRmX0ludGVsXzIwMTYkVElDS0VSKV0gPC0gIklOVEMiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9JbnRlbF8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9JbnRlbF8yMDE2JFBSQ1tpcy5uYShkZl9JbnRlbF8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0ludGVsXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0ludGVsXzIwMTYkVk9MW2lzLm5hKGRmX0ludGVsXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9JbnRlbF8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9JbnRlbF8yMDE2JEJJRFtpcy5uYShkZl9JbnRlbF8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfSW50ZWxfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfSW50ZWxfMjAxNiRBU0tbaXMubmEoZGZfSW50ZWxfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0ludGVsXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9JbnRlbF8yMDE2JE9QRU5QUkNbaXMubmEoZGZfSW50ZWxfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0ludGVsXzIwMTYKYGBgCmBgYHtyfQpkZl9JbnRlbF8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0ludGVsXzIwMTYkdGV4dCkKZGZfSW50ZWxfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9JbnRlbF8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfSW50ZWxfMjAxOCA8LSBkZl9JbnRlbF8yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9JbnRlbF8yMDE4IAoKI1RpY2tlciAKZGZfSW50ZWxfMjAxOCRUSUNLRVJbaXMubmEoZGZfSW50ZWxfMjAxOCRUSUNLRVIpXSA8LSAiSU5UQyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0ludGVsXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0ludGVsXzIwMTgkUFJDW2lzLm5hKGRmX0ludGVsXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSW50ZWxfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfSW50ZWxfMjAxOCRWT0xbaXMubmEoZGZfSW50ZWxfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0ludGVsXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX0ludGVsXzIwMTgkQklEW2lzLm5hKGRmX0ludGVsXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9JbnRlbF8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9JbnRlbF8yMDE4JEFTS1tpcy5uYShkZl9JbnRlbF8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSW50ZWxfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0ludGVsXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9JbnRlbF8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSW50ZWxfMjAxOApgYGAKYGBge3J9CmRmX0ludGVsXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSW50ZWxfMjAxOCR0ZXh0KQpkZl9JbnRlbF8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0ludGVsXzIwMTgkdGV4dCkKYGBgCgpgYGB7cn0KI0FjdGl2aXNpb24KI1JlbW92ZSBjb2x1bW5zIApkZl9BY3RpdmlzaW9uXzIwMTYgPC0gZGZfQWN0aXZpc2lvbl8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9BY3RpdmlzaW9uXzIwMTYgCgojVGlja2VyIApkZl9BY3RpdmlzaW9uXzIwMTYkVElDS0VSW2lzLm5hKGRmX0FjdGl2aXNpb25fMjAxNiRUSUNLRVIpXSA8LSAiQVRWSSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FjdGl2aXNpb25fMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfQWN0aXZpc2lvbl8yMDE2JFBSQ1tpcy5uYShkZl9BY3RpdmlzaW9uXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQWN0aXZpc2lvbl8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9BY3RpdmlzaW9uXzIwMTYkVk9MW2lzLm5hKGRmX0FjdGl2aXNpb25fMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FjdGl2aXNpb25fMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfQWN0aXZpc2lvbl8yMDE2JEJJRFtpcy5uYShkZl9BY3RpdmlzaW9uXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BY3RpdmlzaW9uXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0FjdGl2aXNpb25fMjAxNiRBU0tbaXMubmEoZGZfQWN0aXZpc2lvbl8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQWN0aXZpc2lvbl8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfQWN0aXZpc2lvbl8yMDE2JE9QRU5QUkNbaXMubmEoZGZfQWN0aXZpc2lvbl8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQWN0aXZpc2lvbl8yMDE2CmBgYApgYGB7cn0KZGZfQWN0aXZpc2lvbl8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FjdGl2aXNpb25fMjAxNiR0ZXh0KQpkZl9BY3RpdmlzaW9uXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfQWN0aXZpc2lvbl8yMDE2JHRleHQpCmBgYAoKCmBgYHtyfQojUmVtb3ZlIGNvbHVtbnMgCmRmX0FjdGl2aXNpb25fMjAxOCA8LSBkZl9BY3RpdmlzaW9uXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0FjdGl2aXNpb25fMjAxOCAKCiNUaWNrZXIgCmRmX0FjdGl2aXNpb25fMjAxOCRUSUNLRVJbaXMubmEoZGZfQWN0aXZpc2lvbl8yMDE4JFRJQ0tFUildIDwtICJBVFZJIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfQWN0aXZpc2lvbl8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BY3RpdmlzaW9uXzIwMTgkUFJDW2lzLm5hKGRmX0FjdGl2aXNpb25fMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9BY3RpdmlzaW9uXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FjdGl2aXNpb25fMjAxOCRWT0xbaXMubmEoZGZfQWN0aXZpc2lvbl8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfQWN0aXZpc2lvbl8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BY3RpdmlzaW9uXzIwMTgkQklEW2lzLm5hKGRmX0FjdGl2aXNpb25fMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0FjdGl2aXNpb25fMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQWN0aXZpc2lvbl8yMDE4JEFTS1tpcy5uYShkZl9BY3RpdmlzaW9uXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9BY3RpdmlzaW9uXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BY3RpdmlzaW9uXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9BY3RpdmlzaW9uXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9BY3RpdmlzaW9uXzIwMTgKYGBgCmBgYHtyfQpkZl9BY3RpdmlzaW9uXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQWN0aXZpc2lvbl8yMDE4JHRleHQpCmRmX0FjdGl2aXNpb25fMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9BY3RpdmlzaW9uXzIwMTgkdGV4dCkKYGBgCgpgYGB7cn0KI0ludWl0CiNSZW1vdmUgY29sdW1ucyAKZGZfSW51aXRfMjAxNiA8LSBkZl9JbnVpdF8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9JbnVpdF8yMDE2IAoKI1RpY2tlciAKZGZfSW51aXRfMjAxNiRUSUNLRVJbaXMubmEoZGZfSW51aXRfMjAxNiRUSUNLRVIpXSA8LSAiSU5UVSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0ludWl0XzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0ludWl0XzIwMTYkUFJDW2lzLm5hKGRmX0ludWl0XzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSW51aXRfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfSW51aXRfMjAxNiRWT0xbaXMubmEoZGZfSW51aXRfMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0ludWl0XzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX0ludWl0XzIwMTYkQklEW2lzLm5hKGRmX0ludWl0XzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9JbnVpdF8yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9JbnVpdF8yMDE2JEFTS1tpcy5uYShkZl9JbnVpdF8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSW51aXRfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0ludWl0XzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9JbnVpdF8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSW51aXRfMjAxNgpgYGAKYGBge3J9CmRmX0ludWl0XzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSW51aXRfMjAxNiR0ZXh0KQpkZl9JbnVpdF8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0ludWl0XzIwMTYkdGV4dCkKYGBgCgpgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9JbnVpdF8yMDE4IDwtIGRmX0ludWl0XzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0ludWl0XzIwMTgKCgojVGlja2VyIApkZl9JbnVpdF8yMDE4JFRJQ0tFUltpcy5uYShkZl9JbnVpdF8yMDE4JFRJQ0tFUildIDwtICJJTlRVIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfSW51aXRfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSW51aXRfMjAxOCRQUkNbaXMubmEoZGZfSW51aXRfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9JbnVpdF8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9JbnVpdF8yMDE4JFZPTFtpcy5uYShkZl9JbnVpdF8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfSW51aXRfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSW51aXRfMjAxOCRCSURbaXMubmEoZGZfSW51aXRfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0ludWl0XzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0ludWl0XzIwMTgkQVNLW2lzLm5hKGRmX0ludWl0XzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9JbnVpdF8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSW51aXRfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0ludWl0XzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9JbnVpdF8yMDE4CmBgYApgYGB7cn0KZGZfSW51aXRfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9JbnVpdF8yMDE4JHRleHQpCmRmX0ludWl0XzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSW51aXRfMjAxOCR0ZXh0KQpgYGAKCmBgYHtyfQojQWxsZXJnYW4gCiNSZW1vdmUgY29sdW1ucyAKZGZfQWxsZXJnYW5fMjAxNiA8LSBkZl9BbGxlcmdhbl8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9BbGxlcmdhbl8yMDE2CgojVGlja2VyIApkZl9BbGxlcmdhbl8yMDE2JFRJQ0tFUltpcy5uYShkZl9BbGxlcmdhbl8yMDE2JFRJQ0tFUildIDwtICJBR04iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9BbGxlcmdhbl8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BbGxlcmdhbl8yMDE2JFBSQ1tpcy5uYShkZl9BbGxlcmdhbl8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0FsbGVyZ2FuXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FsbGVyZ2FuXzIwMTYkVk9MW2lzLm5hKGRmX0FsbGVyZ2FuXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9BbGxlcmdhbl8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BbGxlcmdhbl8yMDE2JEJJRFtpcy5uYShkZl9BbGxlcmdhbl8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQWxsZXJnYW5fMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQWxsZXJnYW5fMjAxNiRBU0tbaXMubmEoZGZfQWxsZXJnYW5fMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0FsbGVyZ2FuXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BbGxlcmdhbl8yMDE2JE9QRU5QUkNbaXMubmEoZGZfQWxsZXJnYW5fMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0FsbGVyZ2FuXzIwMTYKYGBgCmBgYHtyfQpkZl9BbGxlcmdhbl8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FsbGVyZ2FuXzIwMTYkdGV4dCkKZGZfQWxsZXJnYW5fMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9BbGxlcmdhbl8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfQWxsZXJnYW5fMjAxOCA8LSBkZl9BbGxlcmdhbl8yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9BbGxlcmdhbl8yMDE4CgojVGlja2VyIApkZl9BbGxlcmdhbl8yMDE4JFRJQ0tFUltpcy5uYShkZl9BbGxlcmdhbl8yMDE4JFRJQ0tFUildIDwtICJBR04iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9BbGxlcmdhbl8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BbGxlcmdhbl8yMDE4JFBSQ1tpcy5uYShkZl9BbGxlcmdhbl8yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0FsbGVyZ2FuXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FsbGVyZ2FuXzIwMTgkVk9MW2lzLm5hKGRmX0FsbGVyZ2FuXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9BbGxlcmdhbl8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BbGxlcmdhbl8yMDE4JEJJRFtpcy5uYShkZl9BbGxlcmdhbl8yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQWxsZXJnYW5fMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQWxsZXJnYW5fMjAxOCRBU0tbaXMubmEoZGZfQWxsZXJnYW5fMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0FsbGVyZ2FuXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BbGxlcmdhbl8yMDE4JE9QRU5QUkNbaXMubmEoZGZfQWxsZXJnYW5fMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0FsbGVyZ2FuXzIwMTgKYGBgCgoKYGBge3J9CmRmX0FsbGVyZ2FuXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQWxsZXJnYW5fMjAxOCR0ZXh0KQpkZl9BbGxlcmdhbl8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0FsbGVyZ2FuXzIwMTgkdGV4dCkKYGBgCgpgYGB7cn0KI0h1bWFuYQojUmVtb3ZlIGNvbHVtbnMgCmRmX0h1bWFuYV8yMDE2IDwtIGRmX0h1bWFuYV8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9IdW1hbmFfMjAxNgoKI1RpY2tlciAKZGZfSHVtYW5hXzIwMTYkVElDS0VSW2lzLm5hKGRmX0h1bWFuYV8yMDE2JFRJQ0tFUildIDwtICJIVU0iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9IdW1hbmFfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSHVtYW5hXzIwMTYkUFJDW2lzLm5hKGRmX0h1bWFuYV8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0h1bWFuYV8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9IdW1hbmFfMjAxNiRWT0xbaXMubmEoZGZfSHVtYW5hXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9IdW1hbmFfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSHVtYW5hXzIwMTYkQklEW2lzLm5hKGRmX0h1bWFuYV8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfSHVtYW5hXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0h1bWFuYV8yMDE2JEFTS1tpcy5uYShkZl9IdW1hbmFfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0h1bWFuYV8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSHVtYW5hXzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9IdW1hbmFfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0h1bWFuYV8yMDE2CmBgYAoKCmBgYHtyfQpkZl9IdW1hbmFfMjAxNiR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9IdW1hbmFfMjAxNiR0ZXh0KQpkZl9IdW1hbmFfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9IdW1hbmFfMjAxNiR0ZXh0KQpgYGAKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfSHVtYW5hXzIwMTggPC0gZGZfSHVtYW5hXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0h1bWFuYV8yMDE4CgojVGlja2VyIApkZl9IdW1hbmFfMjAxOCRUSUNLRVJbaXMubmEoZGZfSHVtYW5hXzIwMTgkVElDS0VSKV0gPC0gIkhVTSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0h1bWFuYV8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9IdW1hbmFfMjAxOCRQUkNbaXMubmEoZGZfSHVtYW5hXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSHVtYW5hXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0h1bWFuYV8yMDE4JFZPTFtpcy5uYShkZl9IdW1hbmFfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0h1bWFuYV8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9IdW1hbmFfMjAxOCRCSURbaXMubmEoZGZfSHVtYW5hXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9IdW1hbmFfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfSHVtYW5hXzIwMTgkQVNLW2lzLm5hKGRmX0h1bWFuYV8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSHVtYW5hXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9IdW1hbmFfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0h1bWFuYV8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSHVtYW5hXzIwMTgKCmBgYApgYGB7cn0KZGZfSHVtYW5hXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSHVtYW5hXzIwMTgkdGV4dCkKZGZfSHVtYW5hXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSHVtYW5hXzIwMTgkdGV4dCkKYGBgCgpgYGB7cn0KI0NCIEF1dG9kZXNrIAojUmVtb3ZlIGNvbHVtbnMgCmRmX0NCX2F1dG9kZXNrXzIwMTYgPC0gZGZfQ0JfYXV0b2Rlc2tfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQ0JfYXV0b2Rlc2tfMjAxNgoKI1RpY2tlciAKZGZfQ0JfYXV0b2Rlc2tfMjAxNiRUSUNLRVJbaXMubmEoZGZfQ0JfYXV0b2Rlc2tfMjAxNiRUSUNLRVIpXSA8LSAiQURTSyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0NCX2F1dG9kZXNrXzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0NCX2F1dG9kZXNrXzIwMTYkUFJDW2lzLm5hKGRmX0NCX2F1dG9kZXNrXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQ0JfYXV0b2Rlc2tfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfQ0JfYXV0b2Rlc2tfMjAxNiRWT0xbaXMubmEoZGZfQ0JfYXV0b2Rlc2tfMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0NCX2F1dG9kZXNrXzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX0NCX2F1dG9kZXNrXzIwMTYkQklEW2lzLm5hKGRmX0NCX2F1dG9kZXNrXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9DQl9hdXRvZGVza18yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9DQl9hdXRvZGVza18yMDE2JEFTS1tpcy5uYShkZl9DQl9hdXRvZGVza18yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQ0JfYXV0b2Rlc2tfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0NCX2F1dG9kZXNrXzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9DQl9hdXRvZGVza18yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQ0JfYXV0b2Rlc2tfMjAxNgpgYGAKYGBge3J9CmRmX0NCX2F1dG9kZXNrXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQ0JfYXV0b2Rlc2tfMjAxNiR0ZXh0KQpkZl9DQl9hdXRvZGVza18yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0NCX2F1dG9kZXNrXzIwMTYkdGV4dCkKYGBgCgpgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9DQl9hdXRvZGVza18yMDE4IDwtIGRmX0NCX2F1dG9kZXNrXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0NCX2F1dG9kZXNrXzIwMTgKCiNUaWNrZXIgCmRmX0NCX2F1dG9kZXNrXzIwMTgkVElDS0VSW2lzLm5hKGRmX0NCX2F1dG9kZXNrXzIwMTgkVElDS0VSKV0gPC0gIkFEU0siCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9DQl9hdXRvZGVza18yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9DQl9hdXRvZGVza18yMDE4JFBSQ1tpcy5uYShkZl9DQl9hdXRvZGVza18yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0NCX2F1dG9kZXNrXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0NCX2F1dG9kZXNrXzIwMTgkVk9MW2lzLm5hKGRmX0NCX2F1dG9kZXNrXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9DQl9hdXRvZGVza18yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9DQl9hdXRvZGVza18yMDE4JEJJRFtpcy5uYShkZl9DQl9hdXRvZGVza18yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQ0JfYXV0b2Rlc2tfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQ0JfYXV0b2Rlc2tfMjAxOCRBU0tbaXMubmEoZGZfQ0JfYXV0b2Rlc2tfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0NCX2F1dG9kZXNrXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9DQl9hdXRvZGVza18yMDE4JE9QRU5QUkNbaXMubmEoZGZfQ0JfYXV0b2Rlc2tfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0NCX2F1dG9kZXNrXzIwMTgKYGBgCgoKYGBge3J9CmRmX0NCX2F1dG9kZXNrXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQ0JfYXV0b2Rlc2tfMjAxOCR0ZXh0KQpkZl9DQl9hdXRvZGVza18yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0NCX2F1dG9kZXNrXzIwMTgkdGV4dCkKYGBgCmBgYHtyfQojRXF1aW5veAojUmVtb3ZlIGNvbHVtbnMgCmRmX2VxdWlub3hfMjAxOCA8LSBkZl9lcXVpbm94XzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX2VxdWlub3hfMjAxOAoKI1RpY2tlciAKZGZfZXF1aW5veF8yMDE4JFRJQ0tFUltpcy5uYShkZl9lcXVpbm94XzIwMTgkVElDS0VSKV0gPC0gIkVRSVgiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9lcXVpbm94XzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX2VxdWlub3hfMjAxOCRQUkNbaXMubmEoZGZfZXF1aW5veF8yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX2VxdWlub3hfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfZXF1aW5veF8yMDE4JFZPTFtpcy5uYShkZl9lcXVpbm94XzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9lcXVpbm94XzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX2VxdWlub3hfMjAxOCRCSURbaXMubmEoZGZfZXF1aW5veF8yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfZXF1aW5veF8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9lcXVpbm94XzIwMTgkQVNLW2lzLm5hKGRmX2VxdWlub3hfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX2VxdWlub3hfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX2VxdWlub3hfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX2VxdWlub3hfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX2VxdWlub3hfMjAxOApgYGAKYGBge3J9CmRmX2VxdWlub3hfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9lcXVpbm94XzIwMTgkdGV4dCkKZGZfZXF1aW5veF8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX2VxdWlub3hfMjAxOCR0ZXh0KQpgYGAKCmBgYHtyfQojQ2lzY28KI1JlbW92ZSBjb2x1bW5zIApkZl9jaXNjb18yMDE2IDwtIGRmX2Npc2NvXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX2Npc2NvXzIwMTYKCiNUaWNrZXIgCmRmX2Npc2NvXzIwMTYkVElDS0VSW2lzLm5hKGRmX2Npc2NvXzIwMTYkVElDS0VSKV0gPC0gIkNTQ08iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9jaXNjb18yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9jaXNjb18yMDE2JFBSQ1tpcy5uYShkZl9jaXNjb18yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX2Npc2NvXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX2Npc2NvXzIwMTYkVk9MW2lzLm5hKGRmX2Npc2NvXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9jaXNjb18yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9jaXNjb18yMDE2JEJJRFtpcy5uYShkZl9jaXNjb18yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfY2lzY29fMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfY2lzY29fMjAxNiRBU0tbaXMubmEoZGZfY2lzY29fMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX2Npc2NvXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9jaXNjb18yMDE2JE9QRU5QUkNbaXMubmEoZGZfY2lzY29fMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX2Npc2NvXzIwMTYKYGBgCmBgYHtyfQpkZl9jaXNjb18yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX2Npc2NvXzIwMTYkdGV4dCkKZGZfY2lzY29fMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9jaXNjb18yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfY2lzY29fMjAxOCA8LSBkZl9jaXNjb18yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9jaXNjb18yMDE4CgojVGlja2VyIApkZl9jaXNjb18yMDE4JFRJQ0tFUltpcy5uYShkZl9jaXNjb18yMDE4JFRJQ0tFUildIDwtICJDU0NPIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfY2lzY29fMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfY2lzY29fMjAxOCRQUkNbaXMubmEoZGZfY2lzY29fMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9jaXNjb18yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9jaXNjb18yMDE4JFZPTFtpcy5uYShkZl9jaXNjb18yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfY2lzY29fMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfY2lzY29fMjAxOCRCSURbaXMubmEoZGZfY2lzY29fMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX2Npc2NvXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX2Npc2NvXzIwMTgkQVNLW2lzLm5hKGRmX2Npc2NvXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9jaXNjb18yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfY2lzY29fMjAxOCRPUEVOUFJDW2lzLm5hKGRmX2Npc2NvXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9jaXNjb18yMDE4CmBgYAoKCmBgYHtyfQpkZl9jaXNjb18yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX2Npc2NvXzIwMTgkdGV4dCkKZGZfY2lzY29fMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9jaXNjb18yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNFQkFZCiNSZW1vdmUgY29sdW1ucyAKZGZfRUJBWV8yMDE2IDwtIGRmX0VCQVlfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfRUJBWV8yMDE2CgojVGlja2VyIApkZl9FQkFZXzIwMTYkVElDS0VSW2lzLm5hKGRmX0VCQVlfMjAxNiRUSUNLRVIpXSA8LSAiRUJBWSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0VCQVlfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfRUJBWV8yMDE2JFBSQ1tpcy5uYShkZl9FQkFZXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRUJBWV8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9FQkFZXzIwMTYkVk9MW2lzLm5hKGRmX0VCQVlfMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0VCQVlfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfRUJBWV8yMDE2JEJJRFtpcy5uYShkZl9FQkFZXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9FQkFZXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0VCQVlfMjAxNiRBU0tbaXMubmEoZGZfRUJBWV8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRUJBWV8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfRUJBWV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfRUJBWV8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRUJBWV8yMDE2CmBgYApgYGB7cn0KZGZfRUJBWV8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0VCQVlfMjAxNiR0ZXh0KQpkZl9FQkFZXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfRUJBWV8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfRUJBWV8yMDE4IDwtIGRmX0VCQVlfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfRUJBWV8yMDE4CgojVGlja2VyIApkZl9FQkFZXzIwMTgkVElDS0VSW2lzLm5hKGRmX0VCQVlfMjAxOCRUSUNLRVIpXSA8LSAiRUJBWSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0VCQVlfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfRUJBWV8yMDE4JFBSQ1tpcy5uYShkZl9FQkFZXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRUJBWV8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9FQkFZXzIwMTgkVk9MW2lzLm5hKGRmX0VCQVlfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0VCQVlfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfRUJBWV8yMDE4JEJJRFtpcy5uYShkZl9FQkFZXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9FQkFZXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0VCQVlfMjAxOCRBU0tbaXMubmEoZGZfRUJBWV8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRUJBWV8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfRUJBWV8yMDE4JE9QRU5QUkNbaXMubmEoZGZfRUJBWV8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRUJBWV8yMDE4CmBgYApgYGB7cn0KZGZfRUJBWV8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0VCQVlfMjAxOCR0ZXh0KQpkZl9FQkFZXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfRUJBWV8yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNEYXZpdGEKI1JlbW92ZSBjb2x1bW5zIApkZl9EYXZpdGFfMjAxNiA8LSBkZl9EYXZpdGFfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfRGF2aXRhXzIwMTYKCiNUaWNrZXIgCmRmX0Rhdml0YV8yMDE2JFRJQ0tFUltpcy5uYShkZl9EYXZpdGFfMjAxNiRUSUNLRVIpXSA8LSAiRFZBIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfRGF2aXRhXzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0Rhdml0YV8yMDE2JFBSQ1tpcy5uYShkZl9EYXZpdGFfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9EYXZpdGFfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfRGF2aXRhXzIwMTYkVk9MW2lzLm5hKGRmX0Rhdml0YV8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfRGF2aXRhXzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX0Rhdml0YV8yMDE2JEJJRFtpcy5uYShkZl9EYXZpdGFfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0Rhdml0YV8yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFfMjAxNiRBU0tbaXMubmEoZGZfRGF2aXRhXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9EYXZpdGFfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0Rhdml0YV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfRGF2aXRhXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9EYXZpdGFfMjAxNgpgYGAKYGBge3J9CmRmX0Rhdml0YV8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0Rhdml0YV8yMDE2JHRleHQpCmRmX0Rhdml0YV8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0Rhdml0YV8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfRGF2aXRhXzIwMTcgPC0gZGZfRGF2aXRhXzIwMTdbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0Rhdml0YV8yMDE3CgojVGlja2VyIApkZl9EYXZpdGFfMjAxNyRUSUNLRVJbaXMubmEoZGZfRGF2aXRhXzIwMTckVElDS0VSKV0gPC0gIkRWQSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0Rhdml0YV8yMDE3JFBSQywgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFfMjAxNyRQUkNbaXMubmEoZGZfRGF2aXRhXzIwMTckUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRGF2aXRhXzIwMTckVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0Rhdml0YV8yMDE3JFZPTFtpcy5uYShkZl9EYXZpdGFfMjAxNyRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0Rhdml0YV8yMDE3JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFfMjAxNyRCSURbaXMubmEoZGZfRGF2aXRhXzIwMTckQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9EYXZpdGFfMjAxNyRBU0ssIG5hLnJtID0gVFJVRSkKZGZfRGF2aXRhXzIwMTckQVNLW2lzLm5hKGRmX0Rhdml0YV8yMDE3JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRGF2aXRhXzIwMTckT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFfMjAxNyRPUEVOUFJDW2lzLm5hKGRmX0Rhdml0YV8yMDE3JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRGF2aXRhXzIwMTcKYGBgCmBgYHtyfQpkZl9EYXZpdGFfMjAxNyR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9EYXZpdGFfMjAxNyR0ZXh0KQpkZl9EYXZpdGFfMjAxNyR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9EYXZpdGFfMjAxNyR0ZXh0KQpgYGAKCmBgYHtyfQojSWxsdW1pbmEgCiNSZW1vdmUgY29sdW1ucyAKZGZfSWxsdW1pbmFfMjAxNiA8LSBkZl9JbGx1bWluYV8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9JbGx1bWluYV8yMDE2CgojVGlja2VyIApkZl9JbGx1bWluYV8yMDE2JFRJQ0tFUltpcy5uYShkZl9JbGx1bWluYV8yMDE2JFRJQ0tFUildIDwtICJJTE1OIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfSWxsdW1pbmFfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSWxsdW1pbmFfMjAxNiRQUkNbaXMubmEoZGZfSWxsdW1pbmFfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9JbGx1bWluYV8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9JbGx1bWluYV8yMDE2JFZPTFtpcy5uYShkZl9JbGx1bWluYV8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfSWxsdW1pbmFfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSWxsdW1pbmFfMjAxNiRCSURbaXMubmEoZGZfSWxsdW1pbmFfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0lsbHVtaW5hXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0lsbHVtaW5hXzIwMTYkQVNLW2lzLm5hKGRmX0lsbHVtaW5hXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9JbGx1bWluYV8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSWxsdW1pbmFfMjAxNiRPUEVOUFJDW2lzLm5hKGRmX0lsbHVtaW5hXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9JbGx1bWluYV8yMDE2CmBgYApgYGB7cn0KZGZfSWxsdW1pbmFfMjAxNiR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9JbGx1bWluYV8yMDE2JHRleHQpCmRmX0lsbHVtaW5hXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSWxsdW1pbmFfMjAxNiR0ZXh0KQpgYGAKCmBgYHtyfQojUmVtb3ZlIGNvbHVtbnMgCmRmX0lsbHVtaW5hXzIwMTggPC0gZGZfSWxsdW1pbmFfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSWxsdW1pbmFfMjAxOAoKI1RpY2tlciAKZGZfSWxsdW1pbmFfMjAxOCRUSUNLRVJbaXMubmEoZGZfSWxsdW1pbmFfMjAxOCRUSUNLRVIpXSA8LSAiSUxNTiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0lsbHVtaW5hXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0lsbHVtaW5hXzIwMTgkUFJDW2lzLm5hKGRmX0lsbHVtaW5hXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSWxsdW1pbmFfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfSWxsdW1pbmFfMjAxOCRWT0xbaXMubmEoZGZfSWxsdW1pbmFfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0lsbHVtaW5hXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX0lsbHVtaW5hXzIwMTgkQklEW2lzLm5hKGRmX0lsbHVtaW5hXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9JbGx1bWluYV8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9JbGx1bWluYV8yMDE4JEFTS1tpcy5uYShkZl9JbGx1bWluYV8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSWxsdW1pbmFfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0lsbHVtaW5hXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9JbGx1bWluYV8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSWxsdW1pbmFfMjAxOApgYGAKCgpgYGB7cn0KZGZfSWxsdW1pbmFfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9JbGx1bWluYV8yMDE4JHRleHQpCmRmX0lsbHVtaW5hXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSWxsdW1pbmFfMjAxOCR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCgpgYGB7cn0KI0hvbWVkZXBvdCAKI1JlbW92ZSBjb2x1bW5zIApkZl9Ib21lZGVwb3RfMjAxMyA8LSBkZl9Ib21lZGVwb3RfMjAxM1ssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSG9tZWRlcG90XzIwMTMKCiNUaWNrZXIgCmRmX0hvbWVkZXBvdF8yMDEzJFRJQ0tFUltpcy5uYShkZl9Ib21lZGVwb3RfMjAxMyRUSUNLRVIpXSA8LSAiSEQiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9Ib21lZGVwb3RfMjAxMyRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSG9tZWRlcG90XzIwMTMkUFJDW2lzLm5hKGRmX0hvbWVkZXBvdF8yMDEzJFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0hvbWVkZXBvdF8yMDEzJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9Ib21lZGVwb3RfMjAxMyRWT0xbaXMubmEoZGZfSG9tZWRlcG90XzIwMTMkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9Ib21lZGVwb3RfMjAxMyRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSG9tZWRlcG90XzIwMTMkQklEW2lzLm5hKGRmX0hvbWVkZXBvdF8yMDEzJEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfSG9tZWRlcG90XzIwMTMkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0hvbWVkZXBvdF8yMDEzJEFTS1tpcy5uYShkZl9Ib21lZGVwb3RfMjAxMyRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0hvbWVkZXBvdF8yMDEzJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSG9tZWRlcG90XzIwMTMkT1BFTlBSQ1tpcy5uYShkZl9Ib21lZGVwb3RfMjAxMyRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0hvbWVkZXBvdF8yMDEzCmBgYApgYGB7cn0KZGZfSG9tZWRlcG90XzIwMTMkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSG9tZWRlcG90XzIwMTMkdGV4dCkKZGZfSG9tZWRlcG90XzIwMTMkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSG9tZWRlcG90XzIwMTMkdGV4dCkKYGBgCgpgYGB7cn0KI1NvdXRod2VzdCBBaXJsaW5lcyAKI1JlbW92ZSBjb2x1bW5zIApkZl9Tb3V0aHdlc3RfMjAxNiA8LSBkZl9Tb3V0aHdlc3RfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfU291dGh3ZXN0XzIwMTYKCiNUaWNrZXIgCmRmX1NvdXRod2VzdF8yMDE2JFRJQ0tFUltpcy5uYShkZl9Tb3V0aHdlc3RfMjAxNiRUSUNLRVIpXSA8LSAiTFVWIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfU291dGh3ZXN0XzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRod2VzdF8yMDE2JFBSQ1tpcy5uYShkZl9Tb3V0aHdlc3RfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9Tb3V0aHdlc3RfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfU291dGh3ZXN0XzIwMTYkVk9MW2lzLm5hKGRmX1NvdXRod2VzdF8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfU291dGh3ZXN0XzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRod2VzdF8yMDE2JEJJRFtpcy5uYShkZl9Tb3V0aHdlc3RfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1NvdXRod2VzdF8yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9Tb3V0aHdlc3RfMjAxNiRBU0tbaXMubmEoZGZfU291dGh3ZXN0XzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9Tb3V0aHdlc3RfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRod2VzdF8yMDE2JE9QRU5QUkNbaXMubmEoZGZfU291dGh3ZXN0XzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9Tb3V0aHdlc3RfMjAxNgpgYGAKYGBge3J9CmRmX1NvdXRod2VzdF8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX1NvdXRod2VzdF8yMDE2JHRleHQpCmRmX1NvdXRod2VzdF8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1NvdXRod2VzdF8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfU291dGh3ZXN0XzIwMTggPC0gZGZfU291dGh3ZXN0XzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1NvdXRod2VzdF8yMDE4CgojVGlja2VyIApkZl9Tb3V0aHdlc3RfMjAxOCRUSUNLRVJbaXMubmEoZGZfU291dGh3ZXN0XzIwMTgkVElDS0VSKV0gPC0gIkxVViIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX1NvdXRod2VzdF8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9Tb3V0aHdlc3RfMjAxOCRQUkNbaXMubmEoZGZfU291dGh3ZXN0XzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfU291dGh3ZXN0XzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRod2VzdF8yMDE4JFZPTFtpcy5uYShkZl9Tb3V0aHdlc3RfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX1NvdXRod2VzdF8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9Tb3V0aHdlc3RfMjAxOCRCSURbaXMubmEoZGZfU291dGh3ZXN0XzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9Tb3V0aHdlc3RfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfU291dGh3ZXN0XzIwMTgkQVNLW2lzLm5hKGRmX1NvdXRod2VzdF8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfU291dGh3ZXN0XzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9Tb3V0aHdlc3RfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX1NvdXRod2VzdF8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfU291dGh3ZXN0XzIwMTgKYGBgCmBgYHtyfQpkZl9Tb3V0aHdlc3RfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9Tb3V0aHdlc3RfMjAxOCR0ZXh0KQpkZl9Tb3V0aHdlc3RfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9Tb3V0aHdlc3RfMjAxOCR0ZXh0KQpgYGAKCmBgYHtyfQojRklTCiNSZW1vdmUgY29sdW1ucyAKZGZfRklTXzIwMTYgPC0gZGZfRklTXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0ZJU18yMDE2CgojVGlja2VyIApkZl9GSVNfMjAxNiRUSUNLRVJbaXMubmEoZGZfRklTXzIwMTYkVElDS0VSKV0gPC0gIkZJUyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0ZJU18yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9GSVNfMjAxNiRQUkNbaXMubmEoZGZfRklTXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRklTXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0ZJU18yMDE2JFZPTFtpcy5uYShkZl9GSVNfMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0ZJU18yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9GSVNfMjAxNiRCSURbaXMubmEoZGZfRklTXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9GSVNfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfRklTXzIwMTYkQVNLW2lzLm5hKGRmX0ZJU18yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRklTXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9GSVNfMjAxNiRPUEVOUFJDW2lzLm5hKGRmX0ZJU18yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRklTXzIwMTYKYGBgCmBgYHtyfQpkZl9GSVNfMjAxNiR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9GSVNfMjAxNiR0ZXh0KQpkZl9GSVNfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9GSVNfMjAxNiR0ZXh0KQpgYGAKCmBgYHtyfQojUmVtb3ZlIGNvbHVtbnMgCmRmX0ZJU18yMDE4IDwtIGRmX0ZJU18yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9GSVNfMjAxOAoKI1RpY2tlciAKZGZfRklTXzIwMTgkVElDS0VSW2lzLm5hKGRmX0ZJU18yMDE4JFRJQ0tFUildIDwtICJGSVMiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9GSVNfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfRklTXzIwMTgkUFJDW2lzLm5hKGRmX0ZJU18yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0ZJU18yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9GSVNfMjAxOCRWT0xbaXMubmEoZGZfRklTXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9GSVNfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfRklTXzIwMTgkQklEW2lzLm5hKGRmX0ZJU18yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfRklTXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0ZJU18yMDE4JEFTS1tpcy5uYShkZl9GSVNfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0ZJU18yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfRklTXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9GSVNfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0ZJU18yMDE4CmBgYAoKCmBgYHtyfQpkZl9GSVNfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9GSVNfMjAxOCR0ZXh0KQpkZl9GSVNfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9GSVNfMjAxOCR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojTGV1Y2FkaWEgbmF0aW9uCiNSZW1vdmUgY29sdW1ucyAKZGZfTGV1Y2FkaWFfMjAxNiA8LSBkZl9MZXVjYWRpYV8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9MZXVjYWRpYV8yMDE2CgojVGlja2VyIApkZl9MZXVjYWRpYV8yMDE2JFRJQ0tFUltpcy5uYShkZl9MZXVjYWRpYV8yMDE2JFRJQ0tFUildIDwtICJMVUsiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9MZXVjYWRpYV8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9MZXVjYWRpYV8yMDE2JFBSQ1tpcy5uYShkZl9MZXVjYWRpYV8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0xldWNhZGlhXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0xldWNhZGlhXzIwMTYkVk9MW2lzLm5hKGRmX0xldWNhZGlhXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9MZXVjYWRpYV8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9MZXVjYWRpYV8yMDE2JEJJRFtpcy5uYShkZl9MZXVjYWRpYV8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfTGV1Y2FkaWFfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfTGV1Y2FkaWFfMjAxNiRBU0tbaXMubmEoZGZfTGV1Y2FkaWFfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0xldWNhZGlhXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9MZXVjYWRpYV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfTGV1Y2FkaWFfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0xldWNhZGlhXzIwMTYKYGBgCgoKYGBge3J9CmRmX0xldWNhZGlhXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfTGV1Y2FkaWFfMjAxNiR0ZXh0KQpkZl9MZXVjYWRpYV8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0xldWNhZGlhXzIwMTYkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9MZXVjYWRpYV8yMDE4IDwtIGRmX0xldWNhZGlhXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0xldWNhZGlhXzIwMTgKCiNUaWNrZXIgCmRmX0xldWNhZGlhXzIwMTgkVElDS0VSW2lzLm5hKGRmX0xldWNhZGlhXzIwMTgkVElDS0VSKV0gPC0gIkxVSyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0xldWNhZGlhXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0xldWNhZGlhXzIwMTgkUFJDW2lzLm5hKGRmX0xldWNhZGlhXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfTGV1Y2FkaWFfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfTGV1Y2FkaWFfMjAxOCRWT0xbaXMubmEoZGZfTGV1Y2FkaWFfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0xldWNhZGlhXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX0xldWNhZGlhXzIwMTgkQklEW2lzLm5hKGRmX0xldWNhZGlhXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9MZXVjYWRpYV8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9MZXVjYWRpYV8yMDE4JEFTS1tpcy5uYShkZl9MZXVjYWRpYV8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfTGV1Y2FkaWFfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0xldWNhZGlhXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9MZXVjYWRpYV8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfTGV1Y2FkaWFfMjAxOApgYGAKCgpgYGB7cn0KZGZfTGV1Y2FkaWFfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9MZXVjYWRpYV8yMDE4JHRleHQpCmRmX0xldWNhZGlhXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfTGV1Y2FkaWFfMjAxOCR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojVmVyaXpvbgojUmVtb3ZlIGNvbHVtbnMgCmRmX1Zlcml6b25fMjAxOCA8LSBkZl9WZXJpem9uXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1Zlcml6b25fMjAxOAoKI1RpY2tlciAKZGZfVmVyaXpvbl8yMDE4JFRJQ0tFUltpcy5uYShkZl9WZXJpem9uXzIwMTgkVElDS0VSKV0gPC0gIlZaIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfVmVyaXpvbl8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9WZXJpem9uXzIwMTgkUFJDW2lzLm5hKGRmX1Zlcml6b25fMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9WZXJpem9uXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX1Zlcml6b25fMjAxOCRWT0xbaXMubmEoZGZfVmVyaXpvbl8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfVmVyaXpvbl8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9WZXJpem9uXzIwMTgkQklEW2lzLm5hKGRmX1Zlcml6b25fMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1Zlcml6b25fMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfVmVyaXpvbl8yMDE4JEFTS1tpcy5uYShkZl9WZXJpem9uXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9WZXJpem9uXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9WZXJpem9uXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9WZXJpem9uXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9WZXJpem9uXzIwMTgKYGBgCgoKYGBge3J9CmRmX1Zlcml6b25fMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9WZXJpem9uXzIwMTgkdGV4dCkKZGZfVmVyaXpvbl8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1Zlcml6b25fMjAxOCR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojV2VzdGVybiBVbmlvbgojUmVtb3ZlIGNvbHVtbnMgCmRmX1dVXzIwMTYgPC0gZGZfV1VfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfV1VfMjAxNgoKI1RpY2tlciAKZGZfV1VfMjAxNiRUSUNLRVJbaXMubmEoZGZfV1VfMjAxNiRUSUNLRVIpXSA8LSAiV1UiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9XVV8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9XVV8yMDE2JFBSQ1tpcy5uYShkZl9XVV8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1dVXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX1dVXzIwMTYkVk9MW2lzLm5hKGRmX1dVXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9XVV8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9XVV8yMDE2JEJJRFtpcy5uYShkZl9XVV8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfV1VfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfV1VfMjAxNiRBU0tbaXMubmEoZGZfV1VfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1dVXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9XVV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfV1VfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1dVXzIwMTYKYGBgCgoKYGBge3J9CmRmX1dVXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfV1VfMjAxNiR0ZXh0KQpkZl9XVV8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1dVXzIwMTYkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9XVV8yMDE4IDwtIGRmX1dVXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1dVXzIwMTgKCiNUaWNrZXIgCmRmX1dVXzIwMTgkVElDS0VSW2lzLm5hKGRmX1dVXzIwMTgkVElDS0VSKV0gPC0gIldVIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfV1VfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfV1VfMjAxOCRQUkNbaXMubmEoZGZfV1VfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9XVV8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9XVV8yMDE4JFZPTFtpcy5uYShkZl9XVV8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfV1VfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfV1VfMjAxOCRCSURbaXMubmEoZGZfV1VfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1dVXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1dVXzIwMTgkQVNLW2lzLm5hKGRmX1dVXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9XVV8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfV1VfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX1dVXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9XVV8yMDE4CmBgYAoKYGBge3J9CmRmX1dVXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfV1VfMjAxOCR0ZXh0KQpkZl9XVV8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1dVXzIwMTgkdGV4dCkKYGBgCgpgYGB7cn0KI1JlZGhhdAojUmVtb3ZlIGNvbHVtbnMgCmRmX1JlZEhhdF8yMDE2IDwtIGRmX1JlZEhhdF8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9SZWRIYXRfMjAxNgoKI1RpY2tlciAKZGZfUmVkSGF0XzIwMTYkVElDS0VSW2lzLm5hKGRmX1JlZEhhdF8yMDE2JFRJQ0tFUildIDwtICJSSFQiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9SZWRIYXRfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfUmVkSGF0XzIwMTYkUFJDW2lzLm5hKGRmX1JlZEhhdF8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1JlZEhhdF8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9SZWRIYXRfMjAxNiRWT0xbaXMubmEoZGZfUmVkSGF0XzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9SZWRIYXRfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfUmVkSGF0XzIwMTYkQklEW2lzLm5hKGRmX1JlZEhhdF8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfUmVkSGF0XzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1JlZEhhdF8yMDE2JEFTS1tpcy5uYShkZl9SZWRIYXRfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1JlZEhhdF8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfUmVkSGF0XzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9SZWRIYXRfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1JlZEhhdF8yMDE2CmBgYAoKCmBgYHtyfQpkZl9SZWRIYXRfMjAxNiR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9SZWRIYXRfMjAxNiR0ZXh0KQpkZl9SZWRIYXRfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9SZWRIYXRfMjAxNiR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojUmVtb3ZlIGNvbHVtbnMgCmRmX1JlZEhhdF8yMDE4IDwtIGRmX1JlZEhhdF8yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9SZWRIYXRfMjAxOAoKI1RpY2tlciAKZGZfUmVkSGF0XzIwMTgkVElDS0VSW2lzLm5hKGRmX1JlZEhhdF8yMDE4JFRJQ0tFUildIDwtICJSSFQiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9SZWRIYXRfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfUmVkSGF0XzIwMTgkUFJDW2lzLm5hKGRmX1JlZEhhdF8yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1JlZEhhdF8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9SZWRIYXRfMjAxOCRWT0xbaXMubmEoZGZfUmVkSGF0XzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9SZWRIYXRfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfUmVkSGF0XzIwMTgkQklEW2lzLm5hKGRmX1JlZEhhdF8yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfUmVkSGF0XzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1JlZEhhdF8yMDE4JEFTS1tpcy5uYShkZl9SZWRIYXRfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1JlZEhhdF8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfUmVkSGF0XzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9SZWRIYXRfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1JlZEhhdF8yMDE4CmBgYAoKCmBgYHtyfQpkZl9SZWRIYXRfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9SZWRIYXRfMjAxOCR0ZXh0KQpkZl9SZWRIYXRfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9SZWRIYXRfMjAxOCR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojQW1hem9uCiNSZW1vdmUgY29sdW1ucyAKZGZfQU1aTl8yMDE2IDwtIGRmX0FNWk5fMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQU1aTl8yMDE2CgojVGlja2VyIApkZl9BTVpOXzIwMTYkVElDS0VSW2lzLm5hKGRmX0FNWk5fMjAxNiRUSUNLRVIpXSA8LSAiQU1aTiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FNWk5fMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfQU1aTl8yMDE2JFBSQ1tpcy5uYShkZl9BTVpOXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQU1aTl8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9BTVpOXzIwMTYkVk9MW2lzLm5hKGRmX0FNWk5fMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FNWk5fMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfQU1aTl8yMDE2JEJJRFtpcy5uYShkZl9BTVpOXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BTVpOXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0FNWk5fMjAxNiRBU0tbaXMubmEoZGZfQU1aTl8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQU1aTl8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfQU1aTl8yMDE2JE9QRU5QUkNbaXMubmEoZGZfQU1aTl8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQU1aTl8yMDE2CmBgYApgYGB7cn0KZGZfQU1aTl8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FNWk5fMjAxNiR0ZXh0KQpkZl9BTVpOXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfQU1aTl8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfQU1aTl8yMDE4IDwtIGRmX0FNWk5fMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQU1aTl8yMDE4CgojVGlja2VyIApkZl9BTVpOXzIwMTgkVElDS0VSW2lzLm5hKGRmX0FNWk5fMjAxOCRUSUNLRVIpXSA8LSAiQU1aTiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FNWk5fMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfQU1aTl8yMDE4JFBSQ1tpcy5uYShkZl9BTVpOXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQU1aTl8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9BTVpOXzIwMTgkVk9MW2lzLm5hKGRmX0FNWk5fMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FNWk5fMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfQU1aTl8yMDE4JEJJRFtpcy5uYShkZl9BTVpOXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BTVpOXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0FNWk5fMjAxOCRBU0tbaXMubmEoZGZfQU1aTl8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQU1aTl8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfQU1aTl8yMDE4JE9QRU5QUkNbaXMubmEoZGZfQU1aTl8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQU1aTl8yMDE4CmBgYApgYGB7cn0KZGZfQU1aTl8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FNWk5fMjAxOCR0ZXh0KQpkZl9BTVpOXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfQU1aTl8yMDE4JHRleHQpCgpgYGAKCmBgYHtyfQojR0UKI1JlbW92ZSBjb2x1bW5zIApkZl9HRV8yMDE2IDwtIGRmX0dFXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0dFXzIwMTYKCiNUaWNrZXIgCmRmX0dFXzIwMTYkVElDS0VSW2lzLm5hKGRmX0dFXzIwMTYkVElDS0VSKV0gPC0gIkdFIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfR0VfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfR0VfMjAxNiRQUkNbaXMubmEoZGZfR0VfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9HRV8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9HRV8yMDE2JFZPTFtpcy5uYShkZl9HRV8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfR0VfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfR0VfMjAxNiRCSURbaXMubmEoZGZfR0VfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0dFXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0dFXzIwMTYkQVNLW2lzLm5hKGRmX0dFXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9HRV8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfR0VfMjAxNiRPUEVOUFJDW2lzLm5hKGRmX0dFXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9HRV8yMDE2CmBgYAoKCmBgYHtyfQpkZl9HRV8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0dFXzIwMTYkdGV4dCkKZGZfR0VfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9HRV8yMDE2JHRleHQpCmBgYAoKCmBgYHtyfQpgYGAKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfR0VfMjAxNyA8LSBkZl9HRV8yMDE3WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9HRV8yMDE3CgojVGlja2VyIApkZl9HRV8yMDE3JFRJQ0tFUltpcy5uYShkZl9HRV8yMDE3JFRJQ0tFUildIDwtICJHRSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0dFXzIwMTckUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0dFXzIwMTckUFJDW2lzLm5hKGRmX0dFXzIwMTckUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfR0VfMjAxNyRWT0wsIG5hLnJtID0gVFJVRSkKZGZfR0VfMjAxNyRWT0xbaXMubmEoZGZfR0VfMjAxNyRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0dFXzIwMTckQklELCBuYS5ybSA9IFRSVUUpCmRmX0dFXzIwMTckQklEW2lzLm5hKGRmX0dFXzIwMTckQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9HRV8yMDE3JEFTSywgbmEucm0gPSBUUlVFKQpkZl9HRV8yMDE3JEFTS1tpcy5uYShkZl9HRV8yMDE3JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfR0VfMjAxNyRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0dFXzIwMTckT1BFTlBSQ1tpcy5uYShkZl9HRV8yMDE3JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfR0VfMjAxNwpgYGAKYGBge3J9CmRmX0dFXzIwMTckdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfR0VfMjAxNyR0ZXh0KQpkZl9HRV8yMDE3JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0dFXzIwMTckdGV4dCkKYGBgCgpgYGB7cn0KI0Zpc2VydgojUmVtb3ZlIGNvbHVtbnMgCmRmX0Zpc2Vydl8yMDE2IDwtIGRmX0Zpc2Vydl8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9GaXNlcnZfMjAxNgoKI1RpY2tlciAKZGZfRmlzZXJ2XzIwMTYkVElDS0VSW2lzLm5hKGRmX0Zpc2Vydl8yMDE2JFRJQ0tFUildIDwtICJGSVNWIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfRmlzZXJ2XzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0Zpc2Vydl8yMDE2JFBSQ1tpcy5uYShkZl9GaXNlcnZfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9GaXNlcnZfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfRmlzZXJ2XzIwMTYkVk9MW2lzLm5hKGRmX0Zpc2Vydl8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfRmlzZXJ2XzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX0Zpc2Vydl8yMDE2JEJJRFtpcy5uYShkZl9GaXNlcnZfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0Zpc2Vydl8yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9GaXNlcnZfMjAxNiRBU0tbaXMubmEoZGZfRmlzZXJ2XzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9GaXNlcnZfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0Zpc2Vydl8yMDE2JE9QRU5QUkNbaXMubmEoZGZfRmlzZXJ2XzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9GaXNlcnZfMjAxNgpgYGAKYGBge3J9CmRmX0Zpc2Vydl8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0Zpc2Vydl8yMDE2JHRleHQpCmRmX0Zpc2Vydl8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0Zpc2Vydl8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNGaXNlcnYKI1JlbW92ZSBjb2x1bW5zIApkZl9GaXNlcnZfMjAxOCA8LSBkZl9GaXNlcnZfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfRmlzZXJ2XzIwMTgKCiNUaWNrZXIgCmRmX0Zpc2Vydl8yMDE4JFRJQ0tFUltpcy5uYShkZl9GaXNlcnZfMjAxOCRUSUNLRVIpXSA8LSAiRklTViIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0Zpc2Vydl8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9GaXNlcnZfMjAxOCRQUkNbaXMubmEoZGZfRmlzZXJ2XzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRmlzZXJ2XzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0Zpc2Vydl8yMDE4JFZPTFtpcy5uYShkZl9GaXNlcnZfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0Zpc2Vydl8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9GaXNlcnZfMjAxOCRCSURbaXMubmEoZGZfRmlzZXJ2XzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9GaXNlcnZfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfRmlzZXJ2XzIwMTgkQVNLW2lzLm5hKGRmX0Zpc2Vydl8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRmlzZXJ2XzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9GaXNlcnZfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0Zpc2Vydl8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRmlzZXJ2XzIwMTgKYGBgCmBgYHtyfQpkZl9GaXNlcnZfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9GaXNlcnZfMjAxOCR0ZXh0KQpkZl9GaXNlcnZfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9GaXNlcnZfMjAxOCR0ZXh0KQpgYGAKCmBgYHtyfQojV2FzdGUgTWFuYWdlbWVudAojUmVtb3ZlIGNvbHVtbnMgCmRmX1dNXzIwMTggPC0gZGZfV01fMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfV01fMjAxOAoKI1RpY2tlciAKZGZfV01fMjAxOCRUSUNLRVJbaXMubmEoZGZfV01fMjAxOCRUSUNLRVIpXSA8LSAiV00iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9XTV8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9XTV8yMDE4JFBSQ1tpcy5uYShkZl9XTV8yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1dNXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX1dNXzIwMTgkVk9MW2lzLm5hKGRmX1dNXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9XTV8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9XTV8yMDE4JEJJRFtpcy5uYShkZl9XTV8yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfV01fMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfV01fMjAxOCRBU0tbaXMubmEoZGZfV01fMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1dNXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9XTV8yMDE4JE9QRU5QUkNbaXMubmEoZGZfV01fMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1dNXzIwMTgKYGBgCmBgYHtyfQpkZl9XTV8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX1dNXzIwMTgkdGV4dCkKZGZfV01fMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9XTV8yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNXaWxsc1Rvd2VyCiNSZW1vdmUgY29sdW1ucyAKZGZfV2lsbHNfMjAxNiA8LSBkZl9XaWxsc18yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9XaWxsc18yMDE2CgojVGlja2VyIApkZl9XaWxsc18yMDE2JFRJQ0tFUltpcy5uYShkZl9XaWxsc18yMDE2JFRJQ0tFUildIDwtICJXTFRXIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfV2lsbHNfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfV2lsbHNfMjAxNiRQUkNbaXMubmEoZGZfV2lsbHNfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9XaWxsc18yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9XaWxsc18yMDE2JFZPTFtpcy5uYShkZl9XaWxsc18yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfV2lsbHNfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfV2lsbHNfMjAxNiRCSURbaXMubmEoZGZfV2lsbHNfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1dpbGxzXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1dpbGxzXzIwMTYkQVNLW2lzLm5hKGRmX1dpbGxzXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9XaWxsc18yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfV2lsbHNfMjAxNiRPUEVOUFJDW2lzLm5hKGRmX1dpbGxzXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9XaWxsc18yMDE2CmBgYApgYGB7cn0KZGZfV2lsbHNfMjAxNiR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9XaWxsc18yMDE2JHRleHQpCmRmX1dpbGxzXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfV2lsbHNfMjAxNiR0ZXh0KQpgYGAKCmBgYHtyfQojUmVtb3ZlIGNvbHVtbnMgCmRmX1dpbGxzXzIwMTggPC0gZGZfV2lsbHNfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfV2lsbHNfMjAxOAoKI1RpY2tlciAKZGZfV2lsbHNfMjAxOCRUSUNLRVJbaXMubmEoZGZfV2lsbHNfMjAxOCRUSUNLRVIpXSA8LSAiV0xUVyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX1dpbGxzXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1dpbGxzXzIwMTgkUFJDW2lzLm5hKGRmX1dpbGxzXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfV2lsbHNfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfV2lsbHNfMjAxOCRWT0xbaXMubmEoZGZfV2lsbHNfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX1dpbGxzXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX1dpbGxzXzIwMTgkQklEW2lzLm5hKGRmX1dpbGxzXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9XaWxsc18yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9XaWxsc18yMDE4JEFTS1tpcy5uYShkZl9XaWxsc18yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfV2lsbHNfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1dpbGxzXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9XaWxsc18yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfV2lsbHNfMjAxOApgYGAKCgpgYGB7cn0KZGZfV2lsbHNfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9XaWxsc18yMDE4JHRleHQpCmRmX1dpbGxzXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfV2lsbHNfMjAxOCR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojVHJpcGFkdmlzb3IKI1JlbW92ZSBjb2x1bW5zIApkZl90cmlwYWR2aXNvcl8yMDE2IDwtIGRmX3RyaXBhZHZpc29yXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX3RyaXBhZHZpc29yXzIwMTYKCiNUaWNrZXIgCmRmX3RyaXBhZHZpc29yXzIwMTYkVElDS0VSW2lzLm5hKGRmX3RyaXBhZHZpc29yXzIwMTYkVElDS0VSKV0gPC0gIlRSSVAiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl90cmlwYWR2aXNvcl8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl90cmlwYWR2aXNvcl8yMDE2JFBSQ1tpcy5uYShkZl90cmlwYWR2aXNvcl8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX3RyaXBhZHZpc29yXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX3RyaXBhZHZpc29yXzIwMTYkVk9MW2lzLm5hKGRmX3RyaXBhZHZpc29yXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl90cmlwYWR2aXNvcl8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl90cmlwYWR2aXNvcl8yMDE2JEJJRFtpcy5uYShkZl90cmlwYWR2aXNvcl8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfdHJpcGFkdmlzb3JfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfdHJpcGFkdmlzb3JfMjAxNiRBU0tbaXMubmEoZGZfdHJpcGFkdmlzb3JfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX3RyaXBhZHZpc29yXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl90cmlwYWR2aXNvcl8yMDE2JE9QRU5QUkNbaXMubmEoZGZfdHJpcGFkdmlzb3JfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX3RyaXBhZHZpc29yXzIwMTYKYGBgCmBgYHtyfQpkZl90cmlwYWR2aXNvcl8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX3RyaXBhZHZpc29yXzIwMTYkdGV4dCkKZGZfdHJpcGFkdmlzb3JfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl90cmlwYWR2aXNvcl8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfdHJpcGFkdmlzb3JfMjAxOCA8LSBkZl90cmlwYWR2aXNvcl8yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl90cmlwYWR2aXNvcl8yMDE4CgojVGlja2VyIApkZl90cmlwYWR2aXNvcl8yMDE4JFRJQ0tFUltpcy5uYShkZl90cmlwYWR2aXNvcl8yMDE4JFRJQ0tFUildIDwtICJUUklQIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfdHJpcGFkdmlzb3JfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfdHJpcGFkdmlzb3JfMjAxOCRQUkNbaXMubmEoZGZfdHJpcGFkdmlzb3JfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl90cmlwYWR2aXNvcl8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl90cmlwYWR2aXNvcl8yMDE4JFZPTFtpcy5uYShkZl90cmlwYWR2aXNvcl8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfdHJpcGFkdmlzb3JfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfdHJpcGFkdmlzb3JfMjAxOCRCSURbaXMubmEoZGZfdHJpcGFkdmlzb3JfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX3RyaXBhZHZpc29yXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX3RyaXBhZHZpc29yXzIwMTgkQVNLW2lzLm5hKGRmX3RyaXBhZHZpc29yXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl90cmlwYWR2aXNvcl8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfdHJpcGFkdmlzb3JfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX3RyaXBhZHZpc29yXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl90cmlwYWR2aXNvcl8yMDE4CmBgYAoKCmBgYHtyfQpkZl90cmlwYWR2aXNvcl8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX3RyaXBhZHZpc29yXzIwMTgkdGV4dCkKZGZfdHJpcGFkdmlzb3JfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl90cmlwYWR2aXNvcl8yMDE4JHRleHQpCmBgYAoKCmBgYHtyfQpgYGAKYGBge3J9CiNEYXZpdGFLZW50CiNSZW1vdmUgY29sdW1ucyAKZGZfRGF2aXRhS18yMDE2IDwtIGRmX0Rhdml0YUtfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfRGF2aXRhS18yMDE2CgojVGlja2VyIApkZl9EYXZpdGFLXzIwMTYkVElDS0VSW2lzLm5hKGRmX0Rhdml0YUtfMjAxNiRUSUNLRVIpXSA8LSAiRFZBIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfRGF2aXRhS18yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFLXzIwMTYkUFJDW2lzLm5hKGRmX0Rhdml0YUtfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9EYXZpdGFLXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0Rhdml0YUtfMjAxNiRWT0xbaXMubmEoZGZfRGF2aXRhS18yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfRGF2aXRhS18yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFLXzIwMTYkQklEW2lzLm5hKGRmX0Rhdml0YUtfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0Rhdml0YUtfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfRGF2aXRhS18yMDE2JEFTS1tpcy5uYShkZl9EYXZpdGFLXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9EYXZpdGFLXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFLXzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9EYXZpdGFLXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9EYXZpdGFLXzIwMTYKYGBgCgoKYGBge3J9CmRmX0Rhdml0YUtfMjAxNiR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9EYXZpdGFLXzIwMTYkdGV4dCkKZGZfRGF2aXRhS18yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0Rhdml0YUtfMjAxNiR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojUmVtb3ZlIGNvbHVtbnMgCmRmX0Rhdml0YUtfMjAxOCA8LSBkZl9EYXZpdGFLXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0Rhdml0YUtfMjAxOAoKI1RpY2tlciAKZGZfRGF2aXRhS18yMDE4JFRJQ0tFUltpcy5uYShkZl9EYXZpdGFLXzIwMTgkVElDS0VSKV0gPC0gIkRWQSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0Rhdml0YUtfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfRGF2aXRhS18yMDE4JFBSQ1tpcy5uYShkZl9EYXZpdGFLXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRGF2aXRhS18yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9EYXZpdGFLXzIwMTgkVk9MW2lzLm5hKGRmX0Rhdml0YUtfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0Rhdml0YUtfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfRGF2aXRhS18yMDE4JEJJRFtpcy5uYShkZl9EYXZpdGFLXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9EYXZpdGFLXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0Rhdml0YUtfMjAxOCRBU0tbaXMubmEoZGZfRGF2aXRhS18yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRGF2aXRhS18yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfRGF2aXRhS18yMDE4JE9QRU5QUkNbaXMubmEoZGZfRGF2aXRhS18yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRGF2aXRhS18yMDE4CmBgYApgYGB7cn0KZGZfRGF2aXRhS18yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0Rhdml0YUtfMjAxOCR0ZXh0KQpkZl9EYXZpdGFLXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfRGF2aXRhS18yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNTdGFyYnVja3MgCiNSZW1vdmUgY29sdW1ucyAKZGZfU3RhcmJ1Y2tzXzIwMTggPC0gZGZfU3RhcmJ1Y2tzXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1N0YXJidWNrc18yMDE4CgojVGlja2VyIApkZl9TdGFyYnVja3NfMjAxOCRUSUNLRVJbaXMubmEoZGZfU3RhcmJ1Y2tzXzIwMTgkVElDS0VSKV0gPC0gIlNCVVgiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9TdGFyYnVja3NfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfU3RhcmJ1Y2tzXzIwMTgkUFJDW2lzLm5hKGRmX1N0YXJidWNrc18yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1N0YXJidWNrc18yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9TdGFyYnVja3NfMjAxOCRWT0xbaXMubmEoZGZfU3RhcmJ1Y2tzXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9TdGFyYnVja3NfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfU3RhcmJ1Y2tzXzIwMTgkQklEW2lzLm5hKGRmX1N0YXJidWNrc18yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfU3RhcmJ1Y2tzXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1N0YXJidWNrc18yMDE4JEFTS1tpcy5uYShkZl9TdGFyYnVja3NfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1N0YXJidWNrc18yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfU3RhcmJ1Y2tzXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9TdGFyYnVja3NfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1N0YXJidWNrc18yMDE4CmBgYAoKCmBgYHtyfQpkZl9TdGFyYnVja3NfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9TdGFyYnVja3NfMjAxOCR0ZXh0KQpkZl9TdGFyYnVja3NfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9TdGFyYnVja3NfMjAxOCR0ZXh0KQpgYGAKCgpgYGB7cn0KYGBgCmBgYHtyfQojTWNDb3JtaWNrCiNSZW1vdmUgY29sdW1ucyAKZGZfTWNDb3JtaWNrXzIwMTggPC0gZGZfTWNDb3JtaWNrXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX01jQ29ybWlja18yMDE4CgojVGlja2VyIApkZl9NY0Nvcm1pY2tfMjAxOCRUSUNLRVJbaXMubmEoZGZfTWNDb3JtaWNrXzIwMTgkVElDS0VSKV0gPC0gIk1LQyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX01jQ29ybWlja18yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9NY0Nvcm1pY2tfMjAxOCRQUkNbaXMubmEoZGZfTWNDb3JtaWNrXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfTWNDb3JtaWNrXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX01jQ29ybWlja18yMDE4JFZPTFtpcy5uYShkZl9NY0Nvcm1pY2tfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX01jQ29ybWlja18yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9NY0Nvcm1pY2tfMjAxOCRCSURbaXMubmEoZGZfTWNDb3JtaWNrXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9NY0Nvcm1pY2tfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfTWNDb3JtaWNrXzIwMTgkQVNLW2lzLm5hKGRmX01jQ29ybWlja18yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfTWNDb3JtaWNrXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9NY0Nvcm1pY2tfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX01jQ29ybWlja18yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfTWNDb3JtaWNrXzIwMTgKYGBgCmBgYHtyfQpkZl9NY0Nvcm1pY2tfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9NY0Nvcm1pY2tfMjAxOCR0ZXh0KQpkZl9NY0Nvcm1pY2tfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9NY0Nvcm1pY2tfMjAxOCR0ZXh0KQpgYGAKCmBgYHtyfQojSUhTIE1hcmtpdCAKI1JlbW92ZSBjb2x1bW5zIApkZl9JSFNfMjAxOCA8LSBkZl9JSFNfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSUhTXzIwMTgKCiNUaWNrZXIgCmRmX0lIU18yMDE4JFRJQ0tFUltpcy5uYShkZl9JSFNfMjAxOCRUSUNLRVIpXSA8LSAiVENYIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfSUhTXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0lIU18yMDE4JFBSQ1tpcy5uYShkZl9JSFNfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9JSFNfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfSUhTXzIwMTgkVk9MW2lzLm5hKGRmX0lIU18yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfSUhTXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX0lIU18yMDE4JEJJRFtpcy5uYShkZl9JSFNfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0lIU18yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9JSFNfMjAxOCRBU0tbaXMubmEoZGZfSUhTXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9JSFNfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0lIU18yMDE4JE9QRU5QUkNbaXMubmEoZGZfSUhTXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9JSFNfMjAxOApgYGAKYGBge3J9CmRmX0lIU18yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0lIU18yMDE4JHRleHQpCmRmX0lIU18yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0lIU18yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNBTUQgCiNSZW1vdmUgY29sdW1ucyAKZGZfQU1EXzIwMTggPC0gZGZfQU1EXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0FNRF8yMDE4CgojVGlja2VyIApkZl9BTURfMjAxOCRUSUNLRVJbaXMubmEoZGZfQU1EXzIwMTgkVElDS0VSKV0gPC0gIkFNRCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FNRF8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BTURfMjAxOCRQUkNbaXMubmEoZGZfQU1EXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQU1EXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FNRF8yMDE4JFZPTFtpcy5uYShkZl9BTURfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FNRF8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BTURfMjAxOCRCSURbaXMubmEoZGZfQU1EXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BTURfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQU1EXzIwMTgkQVNLW2lzLm5hKGRmX0FNRF8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQU1EXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BTURfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0FNRF8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQU1EXzIwMTgKYGBgCgoKYGBge3J9CmRmX0FNRF8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FNRF8yMDE4JHRleHQpCmRmX0FNRF8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0FNRF8yMDE4JHRleHQpCmBgYAoKCmBgYHtyfQpgYGAKYGBge3J9CiNSZXNNZWQKI1JlbW92ZSBjb2x1bW5zIApkZl9SZXNNZWRfMjAxNiA8LSBkZl9SZXNNZWRfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfUmVzTWVkXzIwMTYKCiNUaWNrZXIgCmRmX1Jlc01lZF8yMDE2JFRJQ0tFUltpcy5uYShkZl9SZXNNZWRfMjAxNiRUSUNLRVIpXSA8LSAiUk1EIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfUmVzTWVkXzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1Jlc01lZF8yMDE2JFBSQ1tpcy5uYShkZl9SZXNNZWRfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9SZXNNZWRfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfUmVzTWVkXzIwMTYkVk9MW2lzLm5hKGRmX1Jlc01lZF8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfUmVzTWVkXzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX1Jlc01lZF8yMDE2JEJJRFtpcy5uYShkZl9SZXNNZWRfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1Jlc01lZF8yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9SZXNNZWRfMjAxNiRBU0tbaXMubmEoZGZfUmVzTWVkXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9SZXNNZWRfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1Jlc01lZF8yMDE2JE9QRU5QUkNbaXMubmEoZGZfUmVzTWVkXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9SZXNNZWRfMjAxNgpgYGAKCgpgYGB7cn0KZGZfUmVzTWVkXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfUmVzTWVkXzIwMTYkdGV4dCkKZGZfUmVzTWVkXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfUmVzTWVkXzIwMTYkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9SZXNNZWRfMjAxOCA8LSBkZl9SZXNNZWRfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfUmVzTWVkXzIwMTgKCiNUaWNrZXIgCmRmX1Jlc01lZF8yMDE4JFRJQ0tFUltpcy5uYShkZl9SZXNNZWRfMjAxOCRUSUNLRVIpXSA8LSAiUk1EIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfUmVzTWVkXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1Jlc01lZF8yMDE4JFBSQ1tpcy5uYShkZl9SZXNNZWRfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9SZXNNZWRfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfUmVzTWVkXzIwMTgkVk9MW2lzLm5hKGRmX1Jlc01lZF8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfUmVzTWVkXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX1Jlc01lZF8yMDE4JEJJRFtpcy5uYShkZl9SZXNNZWRfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1Jlc01lZF8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9SZXNNZWRfMjAxOCRBU0tbaXMubmEoZGZfUmVzTWVkXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9SZXNNZWRfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1Jlc01lZF8yMDE4JE9QRU5QUkNbaXMubmEoZGZfUmVzTWVkXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9SZXNNZWRfMjAxOApgYGAKYGBge3J9CmRmX1Jlc01lZF8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX1Jlc01lZF8yMDE4JHRleHQpCmRmX1Jlc01lZF8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1Jlc01lZF8yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNDQQojUmVtb3ZlIGNvbHVtbnMgCmRmX0NBXzIwMTYgPC0gZGZfQ0FfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQ0FfMjAxNgoKI1RpY2tlciAKZGZfQ0FfMjAxNiRUSUNLRVJbaXMubmEoZGZfQ0FfMjAxNiRUSUNLRVIpXSA8LSAiQ0EiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9DQV8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9DQV8yMDE2JFBSQ1tpcy5uYShkZl9DQV8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0NBXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0NBXzIwMTYkVk9MW2lzLm5hKGRmX0NBXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9DQV8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9DQV8yMDE2JEJJRFtpcy5uYShkZl9DQV8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQ0FfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQ0FfMjAxNiRBU0tbaXMubmEoZGZfQ0FfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0NBXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9DQV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfQ0FfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0NBXzIwMTYKYGBgCmBgYHtyfQpkZl9DQV8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0NBXzIwMTYkdGV4dCkKZGZfQ0FfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9DQV8yMDE2JHRleHQpCmBgYAoKCmBgYHtyfQojUmVtb3ZlIGNvbHVtbnMgCmRmX0NBXzIwMTggPC0gZGZfQ0FfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQ0FfMjAxOAoKI1RpY2tlciAKZGZfQ0FfMjAxOCRUSUNLRVJbaXMubmEoZGZfQ0FfMjAxOCRUSUNLRVIpXSA8LSAiQ0EiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9DQV8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9DQV8yMDE4JFBSQ1tpcy5uYShkZl9DQV8yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0NBXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0NBXzIwMTgkVk9MW2lzLm5hKGRmX0NBXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9DQV8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9DQV8yMDE4JEJJRFtpcy5uYShkZl9DQV8yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQ0FfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQ0FfMjAxOCRBU0tbaXMubmEoZGZfQ0FfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0NBXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9DQV8yMDE4JE9QRU5QUkNbaXMubmEoZGZfQ0FfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0NBXzIwMTgKYGBgCgoKYGBge3J9CmRmX0NBXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQ0FfMjAxOCR0ZXh0KQpkZl9DQV8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0NBXzIwMTgkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI0dNIAojUmVtb3ZlIGNvbHVtbnMgCmRmX0dNXzIwMTYgPC0gZGZfR01fMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfR01fMjAxNgoKI1RpY2tlciAKZGZfR01fMjAxNiRUSUNLRVJbaXMubmEoZGZfR01fMjAxNiRUSUNLRVIpXSA8LSAiR00iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9HTV8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9HTV8yMDE2JFBSQ1tpcy5uYShkZl9HTV8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0dNXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0dNXzIwMTYkVk9MW2lzLm5hKGRmX0dNXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9HTV8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9HTV8yMDE2JEJJRFtpcy5uYShkZl9HTV8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfR01fMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfR01fMjAxNiRBU0tbaXMubmEoZGZfR01fMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0dNXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9HTV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfR01fMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0dNXzIwMTYKYGBgCgoKYGBge3J9CmRmX0dNXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfR01fMjAxNiR0ZXh0KQpkZl9HTV8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0dNXzIwMTYkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9HTV8yMDE4IDwtIGRmX0dNXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0dNXzIwMTgKCiNUaWNrZXIgCmRmX0dNXzIwMTgkVElDS0VSW2lzLm5hKGRmX0dNXzIwMTgkVElDS0VSKV0gPC0gIkdNIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfR01fMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfR01fMjAxOCRQUkNbaXMubmEoZGZfR01fMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9HTV8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9HTV8yMDE4JFZPTFtpcy5uYShkZl9HTV8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfR01fMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfR01fMjAxOCRCSURbaXMubmEoZGZfR01fMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0dNXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0dNXzIwMTgkQVNLW2lzLm5hKGRmX0dNXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9HTV8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfR01fMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0dNXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9HTV8yMDE4CmBgYAoKCmBgYHtyfQpkZl9HTV8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0dNXzIwMTgkdGV4dCkKZGZfR01fMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9HTV8yMDE4JHRleHQpCmBgYApgYGB7cn0KI0FldG5hCiNSZW1vdmUgY29sdW1ucyAKZGZfQWV0bmFfMjAxNiA8LSBkZl9BZXRuYV8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9BZXRuYV8yMDE2CgojVGlja2VyIApkZl9BZXRuYV8yMDE2JFRJQ0tFUltpcy5uYShkZl9BZXRuYV8yMDE2JFRJQ0tFUildIDwtICJBRVQiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9BZXRuYV8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BZXRuYV8yMDE2JFBSQ1tpcy5uYShkZl9BZXRuYV8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0FldG5hXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FldG5hXzIwMTYkVk9MW2lzLm5hKGRmX0FldG5hXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9BZXRuYV8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BZXRuYV8yMDE2JEJJRFtpcy5uYShkZl9BZXRuYV8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQWV0bmFfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQWV0bmFfMjAxNiRBU0tbaXMubmEoZGZfQWV0bmFfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0FldG5hXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BZXRuYV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfQWV0bmFfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0FldG5hXzIwMTYKYGBgCmBgYHtyfQpkZl9BZXRuYV8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FldG5hXzIwMTYkdGV4dCkKZGZfQWV0bmFfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9BZXRuYV8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfQWV0bmFfMjAxOCA8LSBkZl9BZXRuYV8yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9BZXRuYV8yMDE4CgojVGlja2VyIApkZl9BZXRuYV8yMDE4JFRJQ0tFUltpcy5uYShkZl9BZXRuYV8yMDE4JFRJQ0tFUildIDwtICJBRVQiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9BZXRuYV8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BZXRuYV8yMDE4JFBSQ1tpcy5uYShkZl9BZXRuYV8yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0FldG5hXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FldG5hXzIwMTgkVk9MW2lzLm5hKGRmX0FldG5hXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9BZXRuYV8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BZXRuYV8yMDE4JEJJRFtpcy5uYShkZl9BZXRuYV8yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQWV0bmFfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQWV0bmFfMjAxOCRBU0tbaXMubmEoZGZfQWV0bmFfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0FldG5hXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BZXRuYV8yMDE4JE9QRU5QUkNbaXMubmEoZGZfQWV0bmFfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0FldG5hXzIwMTgKYGBgCmBgYHtyfQpkZl9BZXRuYV8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FldG5hXzIwMTgkdGV4dCkKZGZfQWV0bmFfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9BZXRuYV8yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNOUkcKI1JlbW92ZSBjb2x1bW5zIApkZl9OUkdfMjAxNiA8LSBkZl9OUkdfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfTlJHXzIwMTYKCiNUaWNrZXIgCmRmX05SR18yMDE2JFRJQ0tFUltpcy5uYShkZl9OUkdfMjAxNiRUSUNLRVIpXSA8LSAiTlJHIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfTlJHXzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX05SR18yMDE2JFBSQ1tpcy5uYShkZl9OUkdfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9OUkdfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfTlJHXzIwMTYkVk9MW2lzLm5hKGRmX05SR18yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfTlJHXzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX05SR18yMDE2JEJJRFtpcy5uYShkZl9OUkdfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX05SR18yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9OUkdfMjAxNiRBU0tbaXMubmEoZGZfTlJHXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9OUkdfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX05SR18yMDE2JE9QRU5QUkNbaXMubmEoZGZfTlJHXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9OUkdfMjAxNgpgYGAKCgpgYGB7cn0KZGZfTlJHXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfTlJHXzIwMTYkdGV4dCkKZGZfTlJHXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfTlJHXzIwMTYkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9OUkdfMjAxOCA8LSBkZl9OUkdfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfTlJHXzIwMTgKCiNUaWNrZXIgCmRmX05SR18yMDE4JFRJQ0tFUltpcy5uYShkZl9OUkdfMjAxOCRUSUNLRVIpXSA8LSAiTlJHIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfTlJHXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX05SR18yMDE4JFBSQ1tpcy5uYShkZl9OUkdfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9OUkdfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfTlJHXzIwMTgkVk9MW2lzLm5hKGRmX05SR18yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfTlJHXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX05SR18yMDE4JEJJRFtpcy5uYShkZl9OUkdfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX05SR18yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9OUkdfMjAxOCRBU0tbaXMubmEoZGZfTlJHXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9OUkdfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX05SR18yMDE4JE9QRU5QUkNbaXMubmEoZGZfTlJHXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9OUkdfMjAxOApgYGAKCgpgYGB7cn0KZGZfTlJHXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfTlJHXzIwMTgkdGV4dCkKZGZfTlJHXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfTlJHXzIwMTgkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI01lZHRyb25pYwojUmVtb3ZlIGNvbHVtbnMgCmRmX01lZHRyb25pY18yMDE2IDwtIGRmX01lZHRyb25pY18yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9NZWR0cm9uaWNfMjAxNgoKI1RpY2tlciAKZGZfTWVkdHJvbmljXzIwMTYkVElDS0VSW2lzLm5hKGRmX01lZHRyb25pY18yMDE2JFRJQ0tFUildIDwtICJNRFQiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9NZWR0cm9uaWNfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfTWVkdHJvbmljXzIwMTYkUFJDW2lzLm5hKGRmX01lZHRyb25pY18yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX01lZHRyb25pY18yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9NZWR0cm9uaWNfMjAxNiRWT0xbaXMubmEoZGZfTWVkdHJvbmljXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9NZWR0cm9uaWNfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfTWVkdHJvbmljXzIwMTYkQklEW2lzLm5hKGRmX01lZHRyb25pY18yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfTWVkdHJvbmljXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX01lZHRyb25pY18yMDE2JEFTS1tpcy5uYShkZl9NZWR0cm9uaWNfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX01lZHRyb25pY18yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfTWVkdHJvbmljXzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9NZWR0cm9uaWNfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX01lZHRyb25pY18yMDE2CmBgYApgYGB7cn0KZGZfTWVkdHJvbmljXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfTWVkdHJvbmljXzIwMTYkdGV4dCkKZGZfTWVkdHJvbmljXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfTWVkdHJvbmljXzIwMTYkdGV4dCkKYGBgCgpgYGB7cn0KI1JlbW92ZSBjb2x1bW5zIApkZl9NZWR0cm9uaWNfMjAxOCA8LSBkZl9NZWR0cm9uaWNfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfTWVkdHJvbmljXzIwMTgKCiNUaWNrZXIgCmRmX01lZHRyb25pY18yMDE4JFRJQ0tFUltpcy5uYShkZl9NZWR0cm9uaWNfMjAxOCRUSUNLRVIpXSA8LSAiTURUIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfTWVkdHJvbmljXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX01lZHRyb25pY18yMDE4JFBSQ1tpcy5uYShkZl9NZWR0cm9uaWNfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9NZWR0cm9uaWNfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfTWVkdHJvbmljXzIwMTgkVk9MW2lzLm5hKGRmX01lZHRyb25pY18yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfTWVkdHJvbmljXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX01lZHRyb25pY18yMDE4JEJJRFtpcy5uYShkZl9NZWR0cm9uaWNfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX01lZHRyb25pY18yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9NZWR0cm9uaWNfMjAxOCRBU0tbaXMubmEoZGZfTWVkdHJvbmljXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9NZWR0cm9uaWNfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX01lZHRyb25pY18yMDE4JE9QRU5QUkNbaXMubmEoZGZfTWVkdHJvbmljXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9NZWR0cm9uaWNfMjAxOApgYGAKYGBge3J9CmRmX01lZHRyb25pY18yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX01lZHRyb25pY18yMDE4JHRleHQpCmRmX01lZHRyb25pY18yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX01lZHRyb25pY18yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNKdW5pcGVyCiNSZW1vdmUgY29sdW1ucyAKZGZfSnVuaXBlcl8yMDE2IDwtIGRmX0p1bmlwZXJfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSnVuaXBlcl8yMDE2CgojVGlja2VyIApkZl9KdW5pcGVyXzIwMTYkVElDS0VSW2lzLm5hKGRmX0p1bmlwZXJfMjAxNiRUSUNLRVIpXSA8LSAiSk5QUiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl8yMDE2JFBSQ1tpcy5uYShkZl9KdW5pcGVyXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSnVuaXBlcl8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9KdW5pcGVyXzIwMTYkVk9MW2lzLm5hKGRmX0p1bmlwZXJfMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl8yMDE2JEJJRFtpcy5uYShkZl9KdW5pcGVyXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9KdW5pcGVyXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0p1bmlwZXJfMjAxNiRBU0tbaXMubmEoZGZfSnVuaXBlcl8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSnVuaXBlcl8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl8yMDE2JE9QRU5QUkNbaXMubmEoZGZfSnVuaXBlcl8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSnVuaXBlcl8yMDE2CmBgYApgYGB7cn0KZGZfSnVuaXBlcl8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0p1bmlwZXJfMjAxNiR0ZXh0KQpkZl9KdW5pcGVyXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSnVuaXBlcl8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNSZW1vdmUgY29sdW1ucyAKZGZfSnVuaXBlcl8yMDE4IDwtIGRmX0p1bmlwZXJfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSnVuaXBlcl8yMDE4CgojVGlja2VyIApkZl9KdW5pcGVyXzIwMTgkVElDS0VSW2lzLm5hKGRmX0p1bmlwZXJfMjAxOCRUSUNLRVIpXSA8LSAiSk5QUiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl8yMDE4JFBSQ1tpcy5uYShkZl9KdW5pcGVyXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSnVuaXBlcl8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9KdW5pcGVyXzIwMTgkVk9MW2lzLm5hKGRmX0p1bmlwZXJfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl8yMDE4JEJJRFtpcy5uYShkZl9KdW5pcGVyXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9KdW5pcGVyXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0p1bmlwZXJfMjAxOCRBU0tbaXMubmEoZGZfSnVuaXBlcl8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSnVuaXBlcl8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl8yMDE4JE9QRU5QUkNbaXMubmEoZGZfSnVuaXBlcl8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSnVuaXBlcl8yMDE4CmBgYApgYGB7cn0KZGZfSnVuaXBlcl8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0p1bmlwZXJfMjAxOCR0ZXh0KQpkZl9KdW5pcGVyXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSnVuaXBlcl8yMDE4JHRleHQpCmBgYAoKYGBge3J9CiNBZXRuYVIKZGZfQWV0bmFSXzIwMTggPC0gZGZfQWV0bmFSXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0FldG5hUl8yMDE4CgojVGlja2VyIApkZl9BZXRuYVJfMjAxOCRUSUNLRVJbaXMubmEoZGZfQWV0bmFSXzIwMTgkVElDS0VSKV0gPC0gIkFFVCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FldG5hUl8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BZXRuYVJfMjAxOCRQUkNbaXMubmEoZGZfQWV0bmFSXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQWV0bmFSXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FldG5hUl8yMDE4JFZPTFtpcy5uYShkZl9BZXRuYVJfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FldG5hUl8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BZXRuYVJfMjAxOCRCSURbaXMubmEoZGZfQWV0bmFSXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BZXRuYVJfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQWV0bmFSXzIwMTgkQVNLW2lzLm5hKGRmX0FldG5hUl8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQWV0bmFSXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BZXRuYVJfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0FldG5hUl8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQWV0bmFSXzIwMTgKYGBgCgoKYGBge3J9CmRmX0FldG5hUl8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0FldG5hUl8yMDE4JHRleHQpCmRmX0FldG5hUl8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0FldG5hUl8yMDE4JHRleHQpCmBgYApgYGB7cn0KI05ldGZsaXgKZGZfTmV0ZmxpeF8yMDE2IDwtIGRmX05ldGZsaXhfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfTmV0ZmxpeF8yMDE2CgojVGlja2VyIApkZl9OZXRmbGl4XzIwMTYkVElDS0VSW2lzLm5hKGRmX05ldGZsaXhfMjAxNiRUSUNLRVIpXSA8LSAiTkZMWCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX05ldGZsaXhfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfTmV0ZmxpeF8yMDE2JFBSQ1tpcy5uYShkZl9OZXRmbGl4XzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfTmV0ZmxpeF8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9OZXRmbGl4XzIwMTYkVk9MW2lzLm5hKGRmX05ldGZsaXhfMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX05ldGZsaXhfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfTmV0ZmxpeF8yMDE2JEJJRFtpcy5uYShkZl9OZXRmbGl4XzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9OZXRmbGl4XzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX05ldGZsaXhfMjAxNiRBU0tbaXMubmEoZGZfTmV0ZmxpeF8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfTmV0ZmxpeF8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfTmV0ZmxpeF8yMDE2JE9QRU5QUkNbaXMubmEoZGZfTmV0ZmxpeF8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfTmV0ZmxpeF8yMDE2CmBgYApgYGB7cn0KZGZfTmV0ZmxpeF8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX05ldGZsaXhfMjAxNiR0ZXh0KQpkZl9OZXRmbGl4XzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfTmV0ZmxpeF8yMDE2JHRleHQpCmBgYAoKYGBge3J9CiNEaXNuZXkKZGZfRGlzbmV5XzIwMTggPC0gZGZfRGlzbmV5XzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0Rpc25leV8yMDE4CgojVGlja2VyIApkZl9EaXNuZXlfMjAxOCRUSUNLRVJbaXMubmEoZGZfRGlzbmV5XzIwMTgkVElDS0VSKV0gPC0gIkRJUyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0Rpc25leV8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9EaXNuZXlfMjAxOCRQUkNbaXMubmEoZGZfRGlzbmV5XzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRGlzbmV5XzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0Rpc25leV8yMDE4JFZPTFtpcy5uYShkZl9EaXNuZXlfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0Rpc25leV8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9EaXNuZXlfMjAxOCRCSURbaXMubmEoZGZfRGlzbmV5XzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9EaXNuZXlfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfRGlzbmV5XzIwMTgkQVNLW2lzLm5hKGRmX0Rpc25leV8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRGlzbmV5XzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9EaXNuZXlfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX0Rpc25leV8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRGlzbmV5XzIwMTgKYGBgCgoKYGBge3J9CmRmX0Rpc25leV8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0Rpc25leV8yMDE4JHRleHQpCmRmX0Rpc25leV8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0Rpc25leV8yMDE4JHRleHQpCmBgYApgYGB7cn0KI0ZveCAKZGZfRm94XzIwMTUgPC0gZGZfRm94XzIwMTVbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0ZveF8yMDE1CgojVGlja2VyIApkZl9Gb3hfMjAxNSRUSUNLRVJbaXMubmEoZGZfRm94XzIwMTUkVElDS0VSKV0gPC0gIkZPWCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0ZveF8yMDE1JFBSQywgbmEucm0gPSBUUlVFKQpkZl9Gb3hfMjAxNSRQUkNbaXMubmEoZGZfRm94XzIwMTUkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRm94XzIwMTUkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0ZveF8yMDE1JFZPTFtpcy5uYShkZl9Gb3hfMjAxNSRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0ZveF8yMDE1JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9Gb3hfMjAxNSRCSURbaXMubmEoZGZfRm94XzIwMTUkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9Gb3hfMjAxNSRBU0ssIG5hLnJtID0gVFJVRSkKZGZfRm94XzIwMTUkQVNLW2lzLm5hKGRmX0ZveF8yMDE1JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRm94XzIwMTUkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9Gb3hfMjAxNSRPUEVOUFJDW2lzLm5hKGRmX0ZveF8yMDE1JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRm94XzIwMTUKYGBgCgoKYGBge3J9CmRmX0ZveF8yMDE1JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0ZveF8yMDE1JHRleHQpCmRmX0ZveF8yMDE1JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0ZveF8yMDE1JHRleHQpCmBgYAoKYGBge3J9CiNNaWNyb3NvZnQgCmRmX01pY3Jvc29mdF8yMDE2IDwtIGRmX01pY3Jvc29mdF8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9NaWNyb3NvZnRfMjAxNgoKI1RpY2tlciAKZGZfTWljcm9zb2Z0XzIwMTYkVElDS0VSW2lzLm5hKGRmX01pY3Jvc29mdF8yMDE2JFRJQ0tFUildIDwtICJNU0ZUIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfTWljcm9zb2Z0XzIwMTYkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX01pY3Jvc29mdF8yMDE2JFBSQ1tpcy5uYShkZl9NaWNyb3NvZnRfMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9NaWNyb3NvZnRfMjAxNiRWT0wsIG5hLnJtID0gVFJVRSkKZGZfTWljcm9zb2Z0XzIwMTYkVk9MW2lzLm5hKGRmX01pY3Jvc29mdF8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfTWljcm9zb2Z0XzIwMTYkQklELCBuYS5ybSA9IFRSVUUpCmRmX01pY3Jvc29mdF8yMDE2JEJJRFtpcy5uYShkZl9NaWNyb3NvZnRfMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX01pY3Jvc29mdF8yMDE2JEFTSywgbmEucm0gPSBUUlVFKQpkZl9NaWNyb3NvZnRfMjAxNiRBU0tbaXMubmEoZGZfTWljcm9zb2Z0XzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9NaWNyb3NvZnRfMjAxNiRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX01pY3Jvc29mdF8yMDE2JE9QRU5QUkNbaXMubmEoZGZfTWljcm9zb2Z0XzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9NaWNyb3NvZnRfMjAxNgpgYGAKCgpgYGB7cn0KZGZfTWljcm9zb2Z0XzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfTWljcm9zb2Z0XzIwMTYkdGV4dCkKZGZfTWljcm9zb2Z0XzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfTWljcm9zb2Z0XzIwMTYkdGV4dCkKYGBgCmBgYHtyfQpkZl9NaWNyb3NvZnRfMjAxOCA8LSBkZl9NaWNyb3NvZnRfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfTWljcm9zb2Z0XzIwMTgKCiNUaWNrZXIgCmRmX01pY3Jvc29mdF8yMDE4JFRJQ0tFUltpcy5uYShkZl9NaWNyb3NvZnRfMjAxOCRUSUNLRVIpXSA8LSAiTVNGVCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX01pY3Jvc29mdF8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9NaWNyb3NvZnRfMjAxOCRQUkNbaXMubmEoZGZfTWljcm9zb2Z0XzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfTWljcm9zb2Z0XzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX01pY3Jvc29mdF8yMDE4JFZPTFtpcy5uYShkZl9NaWNyb3NvZnRfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX01pY3Jvc29mdF8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9NaWNyb3NvZnRfMjAxOCRCSURbaXMubmEoZGZfTWljcm9zb2Z0XzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9NaWNyb3NvZnRfMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfTWljcm9zb2Z0XzIwMTgkQVNLW2lzLm5hKGRmX01pY3Jvc29mdF8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfTWljcm9zb2Z0XzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9NaWNyb3NvZnRfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX01pY3Jvc29mdF8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfTWljcm9zb2Z0XzIwMTgKYGBgCgoKYGBge3J9CmRmX01pY3Jvc29mdF8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX01pY3Jvc29mdF8yMDE4JHRleHQpCmRmX01pY3Jvc29mdF8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX01pY3Jvc29mdF8yMDE4JHRleHQpCmBgYApgYGB7cn0KI0p1bmlwZXJfU2hheWdhbgpkZl9KdW5pcGVyX1NfMjAxNCA8LSBkZl9KdW5pcGVyX1NfMjAxNFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfSnVuaXBlcl9TXzIwMTQKCiNUaWNrZXIgCmRmX0p1bmlwZXJfU18yMDE0JFRJQ0tFUltpcy5uYShkZl9KdW5pcGVyX1NfMjAxNCRUSUNLRVIpXSA8LSAiSk5QUiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfU18yMDE0JFBSQywgbmEucm0gPSBUUlVFKQpkZl9KdW5pcGVyX1NfMjAxNCRQUkNbaXMubmEoZGZfSnVuaXBlcl9TXzIwMTQkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfSnVuaXBlcl9TXzIwMTQkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0p1bmlwZXJfU18yMDE0JFZPTFtpcy5uYShkZl9KdW5pcGVyX1NfMjAxNCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfU18yMDE0JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9KdW5pcGVyX1NfMjAxNCRCSURbaXMubmEoZGZfSnVuaXBlcl9TXzIwMTQkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9KdW5pcGVyX1NfMjAxNCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl9TXzIwMTQkQVNLW2lzLm5hKGRmX0p1bmlwZXJfU18yMDE0JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfSnVuaXBlcl9TXzIwMTQkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9KdW5pcGVyX1NfMjAxNCRPUEVOUFJDW2lzLm5hKGRmX0p1bmlwZXJfU18yMDE0JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfSnVuaXBlcl9TXzIwMTQKYGBgCgoKYGBge3J9CmRmX0p1bmlwZXJfU18yMDE0JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0p1bmlwZXJfU18yMDE0JHRleHQpCmRmX0p1bmlwZXJfU18yMDE0JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0p1bmlwZXJfU18yMDE0JHRleHQpCmBgYApgYGB7cn0KZGZfSnVuaXBlcl9TXzIwMTYgPC0gZGZfSnVuaXBlcl9TXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0p1bmlwZXJfU18yMDE2CgojVGlja2VyIApkZl9KdW5pcGVyX1NfMjAxNiRUSUNLRVJbaXMubmEoZGZfSnVuaXBlcl9TXzIwMTYkVElDS0VSKV0gPC0gIkpOUFIiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9KdW5pcGVyX1NfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl9TXzIwMTYkUFJDW2lzLm5hKGRmX0p1bmlwZXJfU18yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfU18yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9KdW5pcGVyX1NfMjAxNiRWT0xbaXMubmEoZGZfSnVuaXBlcl9TXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9KdW5pcGVyX1NfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl9TXzIwMTYkQklEW2lzLm5hKGRmX0p1bmlwZXJfU18yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfSnVuaXBlcl9TXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0p1bmlwZXJfU18yMDE2JEFTS1tpcy5uYShkZl9KdW5pcGVyX1NfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0p1bmlwZXJfU18yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfSnVuaXBlcl9TXzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9KdW5pcGVyX1NfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0p1bmlwZXJfU18yMDE2CmBgYApgYGB7cn0KZGZfSnVuaXBlcl9TXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfSnVuaXBlcl9TXzIwMTYkdGV4dCkKZGZfSnVuaXBlcl9TXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfSnVuaXBlcl9TXzIwMTYkdGV4dCkKYGBgCgpgYGB7cn0KI1N5bmNocm9ueSBGaW5hbmNpYWwgCmRmX1NZRk1fMjAxNiA8LSBkZl9TWUZNXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1NZRk1fMjAxNgoKI1RpY2tlciAKZGZfU1lGTV8yMDE2JFRJQ0tFUltpcy5uYShkZl9TWUZNXzIwMTYkVElDS0VSKV0gPC0gIlNZRiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX1NZRk1fMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfU1lGTV8yMDE2JFBSQ1tpcy5uYShkZl9TWUZNXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfU1lGTV8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9TWUZNXzIwMTYkVk9MW2lzLm5hKGRmX1NZRk1fMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX1NZRk1fMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfU1lGTV8yMDE2JEJJRFtpcy5uYShkZl9TWUZNXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9TWUZNXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1NZRk1fMjAxNiRBU0tbaXMubmEoZGZfU1lGTV8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfU1lGTV8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfU1lGTV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfU1lGTV8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfU1lGTV8yMDE2CmBgYAoKCmBgYHtyfQoKZGZfU1lGTV8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX1NZRk1fMjAxNiR0ZXh0KQpkZl9TWUZNXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfU1lGTV8yMDE2JHRleHQpCmBgYApgYGB7cn0KZGZfU1lGTV8yMDE4IDwtIGRmX1NZRk1fMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfU1lGTV8yMDE4CgojVGlja2VyIApkZl9TWUZNXzIwMTgkVElDS0VSW2lzLm5hKGRmX1NZRk1fMjAxOCRUSUNLRVIpXSA8LSAiU1lGIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfU1lGTV8yMDE4JFBSQywgbmEucm0gPSBUUlVFKQpkZl9TWUZNXzIwMTgkUFJDW2lzLm5hKGRmX1NZRk1fMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9TWUZNXzIwMTgkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX1NZRk1fMjAxOCRWT0xbaXMubmEoZGZfU1lGTV8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfU1lGTV8yMDE4JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9TWUZNXzIwMTgkQklEW2lzLm5hKGRmX1NZRk1fMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1NZRk1fMjAxOCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfU1lGTV8yMDE4JEFTS1tpcy5uYShkZl9TWUZNXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9TWUZNXzIwMTgkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9TWUZNXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9TWUZNXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9TWUZNXzIwMTgKYGBgCgoKYGBge3J9CmRmX1NZRk1fMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9TWUZNXzIwMTgkdGV4dCkKZGZfU1lGTV8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1NZRk1fMjAxOCR0ZXh0KQpgYGAKYGBge3J9CiNTb3V0aGVybiBjb21wYW55IApkZl9Tb3V0aGVybl8yMDE2IDwtIGRmX1NvdXRoZXJuXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1NvdXRoZXJuXzIwMTYKCiNUaWNrZXIgCmRmX1NvdXRoZXJuXzIwMTYkVElDS0VSW2lzLm5hKGRmX1NvdXRoZXJuXzIwMTYkVElDS0VSKV0gPC0gIlNPIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfU291dGhlcm5fMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfU291dGhlcm5fMjAxNiRQUkNbaXMubmEoZGZfU291dGhlcm5fMjAxNiRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9Tb3V0aGVybl8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9Tb3V0aGVybl8yMDE2JFZPTFtpcy5uYShkZl9Tb3V0aGVybl8yMDE2JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfU291dGhlcm5fMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfU291dGhlcm5fMjAxNiRCSURbaXMubmEoZGZfU291dGhlcm5fMjAxNiRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1NvdXRoZXJuXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRoZXJuXzIwMTYkQVNLW2lzLm5hKGRmX1NvdXRoZXJuXzIwMTYkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9Tb3V0aGVybl8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfU291dGhlcm5fMjAxNiRPUEVOUFJDW2lzLm5hKGRmX1NvdXRoZXJuXzIwMTYkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9Tb3V0aGVybl8yMDE2CmBgYAoKCmBgYHtyfQpkZl9Tb3V0aGVybl8yMDE2JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX1NvdXRoZXJuXzIwMTYkdGV4dCkKZGZfU291dGhlcm5fMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9Tb3V0aGVybl8yMDE2JHRleHQpCmBgYApgYGB7cn0KZGZfU291dGhlcm5fMjAxOCA8LSBkZl9Tb3V0aGVybl8yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9Tb3V0aGVybl8yMDE4CgojVGlja2VyIApkZl9Tb3V0aGVybl8yMDE4JFRJQ0tFUltpcy5uYShkZl9Tb3V0aGVybl8yMDE4JFRJQ0tFUildIDwtICJTTyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX1NvdXRoZXJuXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRoZXJuXzIwMTgkUFJDW2lzLm5hKGRmX1NvdXRoZXJuXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfU291dGhlcm5fMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfU291dGhlcm5fMjAxOCRWT0xbaXMubmEoZGZfU291dGhlcm5fMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX1NvdXRoZXJuXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRoZXJuXzIwMTgkQklEW2lzLm5hKGRmX1NvdXRoZXJuXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9Tb3V0aGVybl8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9Tb3V0aGVybl8yMDE4JEFTS1tpcy5uYShkZl9Tb3V0aGVybl8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfU291dGhlcm5fMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1NvdXRoZXJuXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9Tb3V0aGVybl8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfU291dGhlcm5fMjAxOApgYGAKCgpgYGB7cn0KZGZfU291dGhlcm5fMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9Tb3V0aGVybl8yMDE4JHRleHQpCmRmX1NvdXRoZXJuXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfU291dGhlcm5fMjAxOCR0ZXh0KQpgYGAKYGBge3J9CiNBcHBsZQpkZl9BcHBsZV8yMDE2IDwtIGRmX0FwcGxlXzIwMTZbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0FwcGxlXzIwMTYKCiNUaWNrZXIgCmRmX0FwcGxlXzIwMTYkVElDS0VSW2lzLm5hKGRmX0FwcGxlXzIwMTYkVElDS0VSKV0gPC0gIkFBUEwiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9BcHBsZV8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9BcHBsZV8yMDE2JFBSQ1tpcy5uYShkZl9BcHBsZV8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0FwcGxlXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FwcGxlXzIwMTYkVk9MW2lzLm5hKGRmX0FwcGxlXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9BcHBsZV8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9BcHBsZV8yMDE2JEJJRFtpcy5uYShkZl9BcHBsZV8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQXBwbGVfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQXBwbGVfMjAxNiRBU0tbaXMubmEoZGZfQXBwbGVfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0FwcGxlXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9BcHBsZV8yMDE2JE9QRU5QUkNbaXMubmEoZGZfQXBwbGVfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0FwcGxlXzIwMTYKYGBgCgoKYGBge3J9CmRmX0FwcGxlXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQXBwbGVfMjAxNiR0ZXh0KQpkZl9BcHBsZV8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0FwcGxlXzIwMTYkdGV4dCkKYGBgCgoKYGBge3J9CmBgYAoKYGBge3J9CmRmX0FwcGxlXzIwMTggPC0gZGZfQXBwbGVfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQXBwbGVfMjAxOAoKI1RpY2tlciAKZGZfQXBwbGVfMjAxOCRUSUNLRVJbaXMubmEoZGZfQXBwbGVfMjAxOCRUSUNLRVIpXSA8LSAiQUFQTCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FwcGxlXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0FwcGxlXzIwMTgkUFJDW2lzLm5hKGRmX0FwcGxlXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQXBwbGVfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfQXBwbGVfMjAxOCRWT0xbaXMubmEoZGZfQXBwbGVfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FwcGxlXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX0FwcGxlXzIwMTgkQklEW2lzLm5hKGRmX0FwcGxlXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BcHBsZV8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9BcHBsZV8yMDE4JEFTS1tpcy5uYShkZl9BcHBsZV8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQXBwbGVfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0FwcGxlXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9BcHBsZV8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQXBwbGVfMjAxOApgYGAKYGBge3J9CmRmX0FwcGxlXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQXBwbGVfMjAxOCR0ZXh0KQpkZl9BcHBsZV8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0FwcGxlXzIwMTgkdGV4dCkKYGBgCgpgYGB7cn0KI1hMCmRmX1hMXzIwMTYgPC0gZGZfWExfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfWExfMjAxNgoKI1RpY2tlciAKZGZfWExfMjAxNiRUSUNLRVJbaXMubmEoZGZfWExfMjAxNiRUSUNLRVIpXSA8LSAiWEwiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9YTF8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9YTF8yMDE2JFBSQ1tpcy5uYShkZl9YTF8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1hMXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX1hMXzIwMTYkVk9MW2lzLm5hKGRmX1hMXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9YTF8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9YTF8yMDE2JEJJRFtpcy5uYShkZl9YTF8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfWExfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfWExfMjAxNiRBU0tbaXMubmEoZGZfWExfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1hMXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9YTF8yMDE2JE9QRU5QUkNbaXMubmEoZGZfWExfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1hMXzIwMTYKYGBgCgoKYGBge3J9CmRmX1hMXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfWExfMjAxNiR0ZXh0KQpkZl9YTF8yMDE2JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX1hMXzIwMTYkdGV4dCkKYGBgCmBgYHtyfQpkZl9YTF8yMDE4IDwtIGRmX1hMXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1hMXzIwMTgKCiNUaWNrZXIgCmRmX1hMXzIwMTgkVElDS0VSW2lzLm5hKGRmX1hMXzIwMTgkVElDS0VSKV0gPC0gIlhMIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfWExfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfWExfMjAxOCRQUkNbaXMubmEoZGZfWExfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9YTF8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9YTF8yMDE4JFZPTFtpcy5uYShkZl9YTF8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfWExfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfWExfMjAxOCRCSURbaXMubmEoZGZfWExfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1hMXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1hMXzIwMTgkQVNLW2lzLm5hKGRmX1hMXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9YTF8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfWExfMjAxOCRPUEVOUFJDW2lzLm5hKGRmX1hMXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9YTF8yMDE4CmBgYAoKCmBgYHtyfQpkZl9YTF8yMDE4JHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX1hMXzIwMTgkdGV4dCkKZGZfWExfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9YTF8yMDE4JHRleHQpCmBgYApgYGB7cn0KI1R5c29uIGZvb2RzCmRmX1R5c29uZl8yMDE2IDwtIGRmX1R5c29uZl8yMDE2WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9UeXNvbmZfMjAxNgoKI1RpY2tlciAKZGZfVHlzb25mXzIwMTYkVElDS0VSW2lzLm5hKGRmX1R5c29uZl8yMDE2JFRJQ0tFUildIDwtICJUU04iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9UeXNvbmZfMjAxNiRQUkMsIG5hLnJtID0gVFJVRSkKZGZfVHlzb25mXzIwMTYkUFJDW2lzLm5hKGRmX1R5c29uZl8yMDE2JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1R5c29uZl8yMDE2JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9UeXNvbmZfMjAxNiRWT0xbaXMubmEoZGZfVHlzb25mXzIwMTYkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9UeXNvbmZfMjAxNiRCSUQsIG5hLnJtID0gVFJVRSkKZGZfVHlzb25mXzIwMTYkQklEW2lzLm5hKGRmX1R5c29uZl8yMDE2JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfVHlzb25mXzIwMTYkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1R5c29uZl8yMDE2JEFTS1tpcy5uYShkZl9UeXNvbmZfMjAxNiRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1R5c29uZl8yMDE2JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfVHlzb25mXzIwMTYkT1BFTlBSQ1tpcy5uYShkZl9UeXNvbmZfMjAxNiRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1R5c29uZl8yMDE2CmBgYAoKCmBgYHtyfQpkZl9UeXNvbmZfMjAxNiR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9UeXNvbmZfMjAxNiR0ZXh0KQpkZl9UeXNvbmZfMjAxNiR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9UeXNvbmZfMjAxNiR0ZXh0KQpgYGAKYGBge3J9CiNUeXNvbiBmb29kcwpkZl9UeXNvbmZfMjAxOCA8LSBkZl9UeXNvbmZfMjAxOFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfVHlzb25mXzIwMTgKCiNUaWNrZXIgCmRmX1R5c29uZl8yMDE4JFRJQ0tFUltpcy5uYShkZl9UeXNvbmZfMjAxOCRUSUNLRVIpXSA8LSAiVFNOIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfVHlzb25mXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1R5c29uZl8yMDE4JFBSQ1tpcy5uYShkZl9UeXNvbmZfMjAxOCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9UeXNvbmZfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfVHlzb25mXzIwMTgkVk9MW2lzLm5hKGRmX1R5c29uZl8yMDE4JFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfVHlzb25mXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX1R5c29uZl8yMDE4JEJJRFtpcy5uYShkZl9UeXNvbmZfMjAxOCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX1R5c29uZl8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9UeXNvbmZfMjAxOCRBU0tbaXMubmEoZGZfVHlzb25mXzIwMTgkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9UeXNvbmZfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX1R5c29uZl8yMDE4JE9QRU5QUkNbaXMubmEoZGZfVHlzb25mXzIwMTgkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9UeXNvbmZfMjAxOApgYGAKCgpgYGB7cn0KZGZfVHlzb25mXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfVHlzb25mXzIwMTgkdGV4dCkKZGZfVHlzb25mXzIwMTgkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfVHlzb25mXzIwMTgkdGV4dCkKYGBgCgoKYGBge3J9CmBgYApgYGB7cn0KI0FrYW1haQpkZl9Ba2FtYWlfMjAxNiA8LSBkZl9Ba2FtYWlfMjAxNlssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQWthbWFpXzIwMTYKCiNUaWNrZXIgCmRmX0FrYW1haV8yMDE2JFRJQ0tFUltpcy5uYShkZl9Ba2FtYWlfMjAxNiRUSUNLRVIpXSA8LSAiQUtBTSIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FrYW1haV8yMDE2JFBSQywgbmEucm0gPSBUUlVFKQpkZl9Ba2FtYWlfMjAxNiRQUkNbaXMubmEoZGZfQWthbWFpXzIwMTYkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQWthbWFpXzIwMTYkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0FrYW1haV8yMDE2JFZPTFtpcy5uYShkZl9Ba2FtYWlfMjAxNiRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FrYW1haV8yMDE2JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9Ba2FtYWlfMjAxNiRCSURbaXMubmEoZGZfQWthbWFpXzIwMTYkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9Ba2FtYWlfMjAxNiRBU0ssIG5hLnJtID0gVFJVRSkKZGZfQWthbWFpXzIwMTYkQVNLW2lzLm5hKGRmX0FrYW1haV8yMDE2JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQWthbWFpXzIwMTYkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9Ba2FtYWlfMjAxNiRPUEVOUFJDW2lzLm5hKGRmX0FrYW1haV8yMDE2JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQWthbWFpXzIwMTYKCmBgYApgYGB7cn0KZGZfQWthbWFpXzIwMTYkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQWthbWFpXzIwMTYkdGV4dCkKZGZfQWthbWFpXzIwMTYkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfQWthbWFpXzIwMTYkdGV4dCkKYGBgCgpgYGB7cn0KZGZfQWthbWFpXzIwMTggPC0gZGZfQWthbWFpXzIwMThbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0FrYW1haV8yMDE4CgojVGlja2VyIApkZl9Ba2FtYWlfMjAxOCRUSUNLRVJbaXMubmEoZGZfQWthbWFpXzIwMTgkVElDS0VSKV0gPC0gIkFLQU0iCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9Ba2FtYWlfMjAxOCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfQWthbWFpXzIwMTgkUFJDW2lzLm5hKGRmX0FrYW1haV8yMDE4JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0FrYW1haV8yMDE4JFZPTCwgbmEucm0gPSBUUlVFKQpkZl9Ba2FtYWlfMjAxOCRWT0xbaXMubmEoZGZfQWthbWFpXzIwMTgkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9Ba2FtYWlfMjAxOCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfQWthbWFpXzIwMTgkQklEW2lzLm5hKGRmX0FrYW1haV8yMDE4JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfQWthbWFpXzIwMTgkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0FrYW1haV8yMDE4JEFTS1tpcy5uYShkZl9Ba2FtYWlfMjAxOCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0FrYW1haV8yMDE4JE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfQWthbWFpXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9Ba2FtYWlfMjAxOCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0FrYW1haV8yMDE4CmBgYAoKCmBgYHtyfQpkZl9Ba2FtYWlfMjAxOCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9Ba2FtYWlfMjAxOCR0ZXh0KQpkZl9Ba2FtYWlfMjAxOCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9Ba2FtYWlfMjAxOCR0ZXh0KQpgYGAKYGBge3J9CiNHb29nbGUgCmRmX0dPT0dMXzIwMTUgPC1tZXJnZShHT09HTF8yMDE1LCBHT09HTF9TUF8yMDE2LCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0dPT0dMXzIwMTUsIGZpbGUgPSAiR29vZ2xlXzIwMTUiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0dPT0dMXzIwMTUgPC0gZGZfR09PR0xfMjAxNVssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfR09PR0xfMjAxNQoKI1RpY2tlciAKZGZfR09PR0xfMjAxNSRUSUNLRVJbaXMubmEoZGZfR09PR0xfMjAxNSRUSUNLRVIpXSA8LSAiR09PR0wiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9HT09HTF8yMDE1JFBSQywgbmEucm0gPSBUUlVFKQpkZl9HT09HTF8yMDE1JFBSQ1tpcy5uYShkZl9HT09HTF8yMDE1JFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX0dPT0dMXzIwMTUkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX0dPT0dMXzIwMTUkVk9MW2lzLm5hKGRmX0dPT0dMXzIwMTUkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9HT09HTF8yMDE1JEJJRCwgbmEucm0gPSBUUlVFKQpkZl9HT09HTF8yMDE1JEJJRFtpcy5uYShkZl9HT09HTF8yMDE1JEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfR09PR0xfMjAxNSRBU0ssIG5hLnJtID0gVFJVRSkKZGZfR09PR0xfMjAxNSRBU0tbaXMubmEoZGZfR09PR0xfMjAxNSRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX0dPT0dMXzIwMTUkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9HT09HTF8yMDE1JE9QRU5QUkNbaXMubmEoZGZfR09PR0xfMjAxNSRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX0dPT0dMXzIwMTUKYGBgCgoKYGBge3J9CmRmX0dPT0dMXzIwMTUkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfR09PR0xfMjAxNSR0ZXh0KQpkZl9HT09HTF8yMDE1JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0dPT0dMXzIwMTUkdGV4dCkKYGBgCmBgYHtyfQpkZl9HT09HTF8yMDE4IDwtbWVyZ2UoR09PR0xfMjAxOCwgR09PR0xFX1NQXzIwMTgsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfR09PR0xfMjAxOCwgZmlsZSA9ICJHb29nbGVfMjAxOCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfR09PR0xfMjAxOCA8LSBkZl9HT09HTF8yMDE4WywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9HT09HTF8yMDE4CgojVGlja2VyIApkZl9HT09HTF8yMDE4JFRJQ0tFUltpcy5uYShkZl9HT09HTF8yMDE4JFRJQ0tFUildIDwtICJHT09HTCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0dPT0dMXzIwMTgkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0dPT0dMXzIwMTgkUFJDW2lzLm5hKGRmX0dPT0dMXzIwMTgkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfR09PR0xfMjAxOCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfR09PR0xfMjAxOCRWT0xbaXMubmEoZGZfR09PR0xfMjAxOCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0dPT0dMXzIwMTgkQklELCBuYS5ybSA9IFRSVUUpCmRmX0dPT0dMXzIwMTgkQklEW2lzLm5hKGRmX0dPT0dMXzIwMTgkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9HT09HTF8yMDE4JEFTSywgbmEucm0gPSBUUlVFKQpkZl9HT09HTF8yMDE4JEFTS1tpcy5uYShkZl9HT09HTF8yMDE4JEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfR09PR0xfMjAxOCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0dPT0dMXzIwMTgkT1BFTlBSQ1tpcy5uYShkZl9HT09HTF8yMDE4JE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfR09PR0xfMjAxOApgYGAKYGBge3J9CmRmX0dPT0dMXzIwMTgkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfR09PR0xfMjAxOCR0ZXh0KQpkZl9HT09HTF8yMDE4JHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0dPT0dMXzIwMTgkdGV4dCkKYGBgCgoKIyNDb3ZpZCBkYXRhc2V0cwpgYGB7cn0KI1dVCmRmX1dVX2NvdmlkIDwtbWVyZ2UoV1VfY292aWQsIFdVX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX1dVX2NvdmlkLCBmaWxlID0gIldVX0NPVklEIiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9XVV9jb3ZpZCA8LSBkZl9XVV9jb3ZpZFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfV1VfY292aWQKCiNUaWNrZXIgCmRmX1dVX2NvdmlkJFRJQ0tFUltpcy5uYShkZl9XVV9jb3ZpZCRUSUNLRVIpXSA8LSAiV1UiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9XVV9jb3ZpZCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfV1VfY292aWQkUFJDW2lzLm5hKGRmX1dVX2NvdmlkJFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX1dVX2NvdmlkJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9XVV9jb3ZpZCRWT0xbaXMubmEoZGZfV1VfY292aWQkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9XVV9jb3ZpZCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfV1VfY292aWQkQklEW2lzLm5hKGRmX1dVX2NvdmlkJEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfV1VfY292aWQkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1dVX2NvdmlkJEFTS1tpcy5uYShkZl9XVV9jb3ZpZCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX1dVX2NvdmlkJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfV1VfY292aWQkT1BFTlBSQ1tpcy5uYShkZl9XVV9jb3ZpZCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX1dVX2NvdmlkCmBgYAoKCmBgYHtyfQpkZl9XVV9jb3ZpZCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9XVV9jb3ZpZCR0ZXh0KQpkZl9XVV9jb3ZpZCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9XVV9jb3ZpZCR0ZXh0KQpgYGAKYGBge3J9CiNBQVBMCmRmX0FBUExfY292aWQgPC1tZXJnZShBQVBMX2NvdmlkLCBBQVBMX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0FBUExfY292aWQsIGZpbGUgPSAiQUFQTF9DT1ZJRCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfQUFQTF9jb3ZpZCA8LSBkZl9BQVBMX2NvdmlkWywtYyg2LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSldIApkZl9BQVBMX2NvdmlkCgojVGlja2VyIApkZl9BQVBMX2NvdmlkJFRJQ0tFUltpcy5uYShkZl9BQVBMX2NvdmlkJFRJQ0tFUildIDwtICJBQVBMIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfQUFQTF9jb3ZpZCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfQUFQTF9jb3ZpZCRQUkNbaXMubmEoZGZfQUFQTF9jb3ZpZCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9BQVBMX2NvdmlkJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9BQVBMX2NvdmlkJFZPTFtpcy5uYShkZl9BQVBMX2NvdmlkJFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfQUFQTF9jb3ZpZCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfQUFQTF9jb3ZpZCRCSURbaXMubmEoZGZfQUFQTF9jb3ZpZCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0FBUExfY292aWQkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0FBUExfY292aWQkQVNLW2lzLm5hKGRmX0FBUExfY292aWQkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9BQVBMX2NvdmlkJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfQUFQTF9jb3ZpZCRPUEVOUFJDW2lzLm5hKGRmX0FBUExfY292aWQkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9BQVBMX2NvdmlkCmBgYApgYGB7cn0KZGZfQUFQTF9jb3ZpZCR0ZXh0IDwtIGNsZWFuX3R3ZWV0cyhkZl9BQVBMX2NvdmlkJHRleHQpCmRmX0FBUExfY292aWQkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfQUFQTF9jb3ZpZCR0ZXh0KQpgYGAKCmBgYHtyfQojUk1ECmRmX1JNRF9jb3ZpZCA8LW1lcmdlKFJNRF9jb3ZpZCwgUk1EX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX1JNRF9jb3ZpZCwgZmlsZSA9ICJSTURfQ09WSUQiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX1JNRF9jb3ZpZCA8LSBkZl9STURfY292aWRbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1JNRF9jb3ZpZAoKI1RpY2tlciAKZGZfUk1EX2NvdmlkJFRJQ0tFUltpcy5uYShkZl9STURfY292aWQkVElDS0VSKV0gPC0gIlJNRCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX1JNRF9jb3ZpZCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfUk1EX2NvdmlkJFBSQ1tpcy5uYShkZl9STURfY292aWQkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfUk1EX2NvdmlkJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9STURfY292aWQkVk9MW2lzLm5hKGRmX1JNRF9jb3ZpZCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX1JNRF9jb3ZpZCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfUk1EX2NvdmlkJEJJRFtpcy5uYShkZl9STURfY292aWQkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9STURfY292aWQkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1JNRF9jb3ZpZCRBU0tbaXMubmEoZGZfUk1EX2NvdmlkJEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfUk1EX2NvdmlkJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfUk1EX2NvdmlkJE9QRU5QUkNbaXMubmEoZGZfUk1EX2NvdmlkJE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfUk1EX2NvdmlkCmBgYApgYGB7cn0KZGZfUk1EX2NvdmlkJHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX1JNRF9jb3ZpZCR0ZXh0KQpkZl9STURfY292aWQkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfUk1EX2NvdmlkJHRleHQpCmBgYAoKYGBge3J9CiNHT09HTApkZl9HT09HTF9jb3ZpZCA8LW1lcmdlKEdPT0dMX2NvdmlkLCBHT09HTF9TUF9jb3ZpZCwgYnkgPSAiZGF0ZSIsIGFsbC54ID0gVFJVRSkgCndyaXRlLmNzdihkZl9HT09HTF9jb3ZpZCwgZmlsZSA9ICJHT09HTF9DT1ZJRCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKZGZfR09PR0xfY292aWQgPC0gZGZfR09PR0xfY292aWRbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0dPT0dMX2NvdmlkCgojVGlja2VyIApkZl9HT09HTF9jb3ZpZCRUSUNLRVJbaXMubmEoZGZfR09PR0xfY292aWQkVElDS0VSKV0gPC0gIkdPT0dMIgoKI1BSQwpQUkNfQVZHIDwtIG1lYW4oZGZfR09PR0xfY292aWQkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0dPT0dMX2NvdmlkJFBSQ1tpcy5uYShkZl9HT09HTF9jb3ZpZCRQUkMpXSA8LSBQUkNfQVZHCgojVk9MClZPTF9BVkcgPC0gbWVhbihkZl9HT09HTF9jb3ZpZCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfR09PR0xfY292aWQkVk9MW2lzLm5hKGRmX0dPT0dMX2NvdmlkJFZPTCldIDwtIFZPTF9BVkcKCiNCSUQKQklEX0FWRyA8LSBCSURfQVZHIDwtIG1lYW4oZGZfR09PR0xfY292aWQkQklELCBuYS5ybSA9IFRSVUUpCmRmX0dPT0dMX2NvdmlkJEJJRFtpcy5uYShkZl9HT09HTF9jb3ZpZCRCSUQpXSA8LSBCSURfQVZHCgojQVNLCkFTS19BVkcgPC0gQVNLX0FWRyA8LSBtZWFuKGRmX0dPT0dMX2NvdmlkJEFTSywgbmEucm0gPSBUUlVFKQpkZl9HT09HTF9jb3ZpZCRBU0tbaXMubmEoZGZfR09PR0xfY292aWQkQVNLKV0gPC0gQVNLX0FWRwoKI09QRU5QUkMKT1BFTl9BVkcgPC0gT1BFTl9BVkcgPC0gbWVhbihkZl9HT09HTF9jb3ZpZCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0dPT0dMX2NvdmlkJE9QRU5QUkNbaXMubmEoZGZfR09PR0xfY292aWQkT1BFTlBSQyldIDwtIE9QRU5fQVZHCgpkZl9HT09HTF9jb3ZpZApgYGAKCgpgYGB7cn0KZGZfR09PR0xfY292aWQkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfR09PR0xfY292aWQkdGV4dCkKZGZfR09PR0xfY292aWQkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfR09PR0xfY292aWQkdGV4dCkKYGBgCmBgYHtyfQojQUdOCmRmX0FHTl9jb3ZpZCA8LW1lcmdlKEFHTl9jb3ZpZCwgQUdOX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0FHTl9jb3ZpZCwgZmlsZSA9ICJBR05fQ09WSUQiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0FHTl9jb3ZpZCA8LSBkZl9BR05fY292aWRbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0FHTl9jb3ZpZAoKI1RpY2tlciAKZGZfQUdOX2NvdmlkJFRJQ0tFUltpcy5uYShkZl9BR05fY292aWQkVElDS0VSKV0gPC0gIkFHTiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FHTl9jb3ZpZCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfQUdOX2NvdmlkJFBSQ1tpcy5uYShkZl9BR05fY292aWQkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQUdOX2NvdmlkJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9BR05fY292aWQkVk9MW2lzLm5hKGRmX0FHTl9jb3ZpZCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FHTl9jb3ZpZCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfQUdOX2NvdmlkJEJJRFtpcy5uYShkZl9BR05fY292aWQkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BR05fY292aWQkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0FHTl9jb3ZpZCRBU0tbaXMubmEoZGZfQUdOX2NvdmlkJEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQUdOX2NvdmlkJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfQUdOX2NvdmlkJE9QRU5QUkNbaXMubmEoZGZfQUdOX2NvdmlkJE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQUdOX2NvdmlkCmBgYAoKCmBgYHtyfQpkZl9BR05fY292aWQkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQUdOX2NvdmlkJHRleHQpCmRmX0FHTl9jb3ZpZCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9BR05fY292aWQkdGV4dCkKYGBgCmBgYHtyfQojQU1BWk9OCmRmX0FNWk5fY292aWQgPC1tZXJnZShBTVpOX2NvdmlkLCBBTVpOX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0FNWk5fY292aWQsIGZpbGUgPSAiQU1aTl9DT1ZJRCIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKCmRmX0FNWk5fY292aWQgPC0gZGZfQU1aTl9jb3ZpZFssLWMoNiw4LDksMTAsMTUsMTcsMTgsMTksMjAsMjEpXSAKZGZfQU1aTl9jb3ZpZAoKI1RpY2tlciAKZGZfQU1aTl9jb3ZpZCRUSUNLRVJbaXMubmEoZGZfQU1aTl9jb3ZpZCRUSUNLRVIpXSA8LSAiQU1aTiIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0FNWk5fY292aWQkUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0FNWk5fY292aWQkUFJDW2lzLm5hKGRmX0FNWk5fY292aWQkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfQU1aTl9jb3ZpZCRWT0wsIG5hLnJtID0gVFJVRSkKZGZfQU1aTl9jb3ZpZCRWT0xbaXMubmEoZGZfQU1aTl9jb3ZpZCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0FNWk5fY292aWQkQklELCBuYS5ybSA9IFRSVUUpCmRmX0FNWk5fY292aWQkQklEW2lzLm5hKGRmX0FNWk5fY292aWQkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9BTVpOX2NvdmlkJEFTSywgbmEucm0gPSBUUlVFKQpkZl9BTVpOX2NvdmlkJEFTS1tpcy5uYShkZl9BTVpOX2NvdmlkJEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfQU1aTl9jb3ZpZCRPUEVOUFJDLCBuYS5ybSA9IFRSVUUpCmRmX0FNWk5fY292aWQkT1BFTlBSQ1tpcy5uYShkZl9BTVpOX2NvdmlkJE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfQU1aTl9jb3ZpZApgYGAKCgpgYGB7cn0KCmRmX0FNWk5fY292aWQkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfQU1aTl9jb3ZpZCR0ZXh0KQpkZl9BTVpOX2NvdmlkJHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX0FNWk5fY292aWQkdGV4dCkKYGBgCmBgYHtyfQojRGlzbmV5CmRmX0RJU19jb3ZpZCA8LW1lcmdlKERJU19jb3ZpZCwgRElTX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX0RJU19jb3ZpZCwgZmlsZSA9ICJESVNfQ09WSUQiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX0RJU19jb3ZpZCA8LSBkZl9ESVNfY292aWRbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX0RJU19jb3ZpZAoKI1RpY2tlciAKZGZfRElTX2NvdmlkJFRJQ0tFUltpcy5uYShkZl9ESVNfY292aWQkVElDS0VSKV0gPC0gIkRJUyIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX0RJU19jb3ZpZCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfRElTX2NvdmlkJFBSQ1tpcy5uYShkZl9ESVNfY292aWQkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfRElTX2NvdmlkJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9ESVNfY292aWQkVk9MW2lzLm5hKGRmX0RJU19jb3ZpZCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX0RJU19jb3ZpZCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfRElTX2NvdmlkJEJJRFtpcy5uYShkZl9ESVNfY292aWQkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9ESVNfY292aWQkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX0RJU19jb3ZpZCRBU0tbaXMubmEoZGZfRElTX2NvdmlkJEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfRElTX2NvdmlkJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfRElTX2NvdmlkJE9QRU5QUkNbaXMubmEoZGZfRElTX2NvdmlkJE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfRElTX2NvdmlkCmBgYAoKCmBgYHtyfQoKZGZfRElTX2NvdmlkJHRleHQgPC0gY2xlYW5fdHdlZXRzKGRmX0RJU19jb3ZpZCR0ZXh0KQpkZl9ESVNfY292aWQkdGV4dCA8LSBsZW1tYXRpemVfd29yZHMoZGZfRElTX2NvdmlkJHRleHQpCmBgYApgYGB7cn0KI01pY3Jvc29mdCAKZGZfTVNGVF9jb3ZpZCA8LW1lcmdlKE1TRlRfY292aWQsIE1TRlRfU1BfY292aWQsIGJ5ID0gImRhdGUiLCBhbGwueCA9IFRSVUUpIAp3cml0ZS5jc3YoZGZfTVNGVF9jb3ZpZCwgZmlsZSA9ICJNU0ZUX0NPVklEIiwgcm93Lm5hbWVzID0gRkFMU0UpCgpkZl9NU0ZUX2NvdmlkIDwtIGRmX01TRlRfY292aWRbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX01TRlRfY292aWQKCiNUaWNrZXIgCmRmX01TRlRfY292aWQkVElDS0VSW2lzLm5hKGRmX01TRlRfY292aWQkVElDS0VSKV0gPC0gIk1TRlQiCgojUFJDClBSQ19BVkcgPC0gbWVhbihkZl9NU0ZUX2NvdmlkJFBSQywgbmEucm0gPSBUUlVFKQpkZl9NU0ZUX2NvdmlkJFBSQ1tpcy5uYShkZl9NU0ZUX2NvdmlkJFBSQyldIDwtIFBSQ19BVkcKCiNWT0wKVk9MX0FWRyA8LSBtZWFuKGRmX01TRlRfY292aWQkVk9MLCBuYS5ybSA9IFRSVUUpCmRmX01TRlRfY292aWQkVk9MW2lzLm5hKGRmX01TRlRfY292aWQkVk9MKV0gPC0gVk9MX0FWRwoKI0JJRApCSURfQVZHIDwtIEJJRF9BVkcgPC0gbWVhbihkZl9NU0ZUX2NvdmlkJEJJRCwgbmEucm0gPSBUUlVFKQpkZl9NU0ZUX2NvdmlkJEJJRFtpcy5uYShkZl9NU0ZUX2NvdmlkJEJJRCldIDwtIEJJRF9BVkcKCiNBU0sKQVNLX0FWRyA8LSBBU0tfQVZHIDwtIG1lYW4oZGZfTVNGVF9jb3ZpZCRBU0ssIG5hLnJtID0gVFJVRSkKZGZfTVNGVF9jb3ZpZCRBU0tbaXMubmEoZGZfTVNGVF9jb3ZpZCRBU0spXSA8LSBBU0tfQVZHCgojT1BFTlBSQwpPUEVOX0FWRyA8LSBPUEVOX0FWRyA8LSBtZWFuKGRmX01TRlRfY292aWQkT1BFTlBSQywgbmEucm0gPSBUUlVFKQpkZl9NU0ZUX2NvdmlkJE9QRU5QUkNbaXMubmEoZGZfTVNGVF9jb3ZpZCRPUEVOUFJDKV0gPC0gT1BFTl9BVkcKCmRmX01TRlRfY292aWQKYGBgCgoKYGBge3J9CmRmX01TRlRfY292aWQkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfTVNGVF9jb3ZpZCR0ZXh0KQpkZl9NU0ZUX2NvdmlkJHRleHQgPC0gbGVtbWF0aXplX3dvcmRzKGRmX01TRlRfY292aWQkdGV4dCkKYGBgCmBgYHtyfQojTWVkdHJvbmljCmRmX01EVF9jb3ZpZCA8LW1lcmdlKE1EVF9Db3ZpZCwgTURUX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX01EVF9jb3ZpZCwgZmlsZSA9ICJNRFRfQ09WSUQiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX01EVF9jb3ZpZCA8LSBkZl9NRFRfY292aWRbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX01EVF9jb3ZpZAoKI1RpY2tlciAKZGZfTURUX2NvdmlkJFRJQ0tFUltpcy5uYShkZl9NRFRfY292aWQkVElDS0VSKV0gPC0gIk1EVCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX01EVF9jb3ZpZCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfTURUX2NvdmlkJFBSQ1tpcy5uYShkZl9NRFRfY292aWQkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfTURUX2NvdmlkJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9NRFRfY292aWQkVk9MW2lzLm5hKGRmX01EVF9jb3ZpZCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX01EVF9jb3ZpZCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfTURUX2NvdmlkJEJJRFtpcy5uYShkZl9NRFRfY292aWQkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9NRFRfY292aWQkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX01EVF9jb3ZpZCRBU0tbaXMubmEoZGZfTURUX2NvdmlkJEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfTURUX2NvdmlkJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfTURUX2NvdmlkJE9QRU5QUkNbaXMubmEoZGZfTURUX2NvdmlkJE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfTURUX2NvdmlkCmBgYAoKCmBgYHtyfQpkZl9NRFRfY292aWQkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfTURUX2NvdmlkJHRleHQpCmRmX01EVF9jb3ZpZCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9NRFRfY292aWQkdGV4dCkKYGBgCmBgYHtyfQojUmVkSGF0CmRmX1JIVF9jb3ZpZCA8LW1lcmdlKFJIVF9jb3ZpZCwgUkhUX1NQX2NvdmlkLCBieSA9ICJkYXRlIiwgYWxsLnggPSBUUlVFKSAKd3JpdGUuY3N2KGRmX1JIVF9jb3ZpZCwgZmlsZSA9ICJSSFRfQ09WSUQiLCByb3cubmFtZXMgPSBGQUxTRSkKCmRmX1JIVF9jb3ZpZCA8LSBkZl9SSFRfY292aWRbLC1jKDYsOCw5LDEwLDE1LDE3LDE4LDE5LDIwLDIxKV0gCmRmX1JIVF9jb3ZpZAoKI1RpY2tlciAKZGZfUkhUX2NvdmlkJFRJQ0tFUltpcy5uYShkZl9SSFRfY292aWQkVElDS0VSKV0gPC0gIlJIVCIKCiNQUkMKUFJDX0FWRyA8LSBtZWFuKGRmX1JIVF9jb3ZpZCRQUkMsIG5hLnJtID0gVFJVRSkKZGZfUkhUX2NvdmlkJFBSQ1tpcy5uYShkZl9SSFRfY292aWQkUFJDKV0gPC0gUFJDX0FWRwoKI1ZPTApWT0xfQVZHIDwtIG1lYW4oZGZfUkhUX2NvdmlkJFZPTCwgbmEucm0gPSBUUlVFKQpkZl9SSFRfY292aWQkVk9MW2lzLm5hKGRmX1JIVF9jb3ZpZCRWT0wpXSA8LSBWT0xfQVZHCgojQklECkJJRF9BVkcgPC0gQklEX0FWRyA8LSBtZWFuKGRmX1JIVF9jb3ZpZCRCSUQsIG5hLnJtID0gVFJVRSkKZGZfUkhUX2NvdmlkJEJJRFtpcy5uYShkZl9SSFRfY292aWQkQklEKV0gPC0gQklEX0FWRwoKI0FTSwpBU0tfQVZHIDwtIEFTS19BVkcgPC0gbWVhbihkZl9SSFRfY292aWQkQVNLLCBuYS5ybSA9IFRSVUUpCmRmX1JIVF9jb3ZpZCRBU0tbaXMubmEoZGZfUkhUX2NvdmlkJEFTSyldIDwtIEFTS19BVkcKCiNPUEVOUFJDCk9QRU5fQVZHIDwtIE9QRU5fQVZHIDwtIG1lYW4oZGZfUkhUX2NvdmlkJE9QRU5QUkMsIG5hLnJtID0gVFJVRSkKZGZfUkhUX2NvdmlkJE9QRU5QUkNbaXMubmEoZGZfUkhUX2NvdmlkJE9QRU5QUkMpXSA8LSBPUEVOX0FWRwoKZGZfUkhUX2NvdmlkCmBgYAoKCmBgYHtyfQpkZl9SSFRfY292aWQkdGV4dCA8LSBjbGVhbl90d2VldHMoZGZfUkhUX2NvdmlkJHRleHQpCmRmX1JIVF9jb3ZpZCR0ZXh0IDwtIGxlbW1hdGl6ZV93b3JkcyhkZl9SSFRfY292aWQkdGV4dCkKYGBgCgojI1dvcmRjbG91ZHMgCgpgYGB7cn0KI1BhY2thZ2VzIApsaWJyYXJ5KHdvcmRjbG91ZCkKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmxpYnJhcnkod29yZGNsb3VkMikKbGlicmFyeSh0bSkKbGlicmFyeSgidGlkeXZlcnNlIikKYGBgCmBgYHtyfQojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1Rlc3QkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNKb2huc29uXzIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9Kb2huc29uXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCmBgYHtyfQojSm9obnNvbiAyMDE3CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfSm9obnNvbl8yMDE3JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojTmFzZGFxCiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfTkFTREFRJHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKCmBgYApgYGB7cn0KI0F1dG9kZXNrIAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX2F1dG9kZXNrJHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKCmBgYAoKYGBge3J9CiNIYXNicm8gCiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfSGFzYnJvXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfSGFzYnJvXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKCmBgYHtyfQojSW50ZWwgMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0ludGVsXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNJbnRlbCAyMDE4CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfSW50ZWxfMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI0FjdGl2aXNpb24gMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0FjdGl2aXNpb25fMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI0FjdGl2aXNpb24gMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0FjdGl2aXNpb25fMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI0ludWl0IDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9JbnVpdF8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI0ludWl0IDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9JbnVpdF8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojQWxsZXJnYW4gMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0FsbGVyZ2FuXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKCmBgYHtyfQojQWxsZXJnYW4gMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0FsbGVyZ2FuXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNIdW1hbmEgMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0h1bWFuYV8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojSHVtYW5hIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9IdW1hbmFfMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI0F1dG9kZXNrIENCIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9DQl9hdXRvZGVza18yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI0F1dG9kZXNrIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9DQl9hdXRvZGVza18yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojRXF1aW5veCAyMDE4CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfZXF1aW5veF8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI0Npc2NvIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9jaXNjb18yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI0Npc2NvIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9jaXNjb18yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojRUJBWSAyMDE2CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfRUJBWV8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojRUJBWSAyMDE4CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfRUJBWV8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKCmBgYAoKYGBge3J9CiNEYXZpdGEgMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0Rhdml0YV8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojRGF2aXRhIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9EYXZpdGFfMjAxNyR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI0lsbHVtaW5hIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9JbGx1bWluYV8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojSWxsdW1pbmEgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0lsbHVtaW5hXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNIb21lZGVwb3QKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9Ib21lZGVwb3RfMjAxMyR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI1NvdXRod2VzdCBhaXJsaW5lcyAyMDE2CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfU291dGh3ZXN0XzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNTb3V0aHdlc3QgQWlybGluZXMgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1NvdXRod2VzdF8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojRklTIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9GSVNfMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI0ZJUyAyMDE4CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfRklTXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNMZXVjYWRpYSBOYXRpb24gMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0xldWNhZGlhXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNMZXVjYWRpYSBOYXRpb24gMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0xldWNhZGlhXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCmBgYHtyfQojVmVyaXpvbgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1Zlcml6b25fMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI1dlc3Rlcm4gVW5pb24gMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1dVXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNXZXN0ZXJuIFVuaW9uIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9XVV8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojUmVkSGF0IDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9SZWRIYXRfMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCgpgYGAKYGBge3J9CiNSZWRIYXQgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1JlZEhhdF8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKCmBgYApgYGB7cn0KI0FtYXpvbiAyMDE2CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfQU1aTl8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojQW1hem9uIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9BTVpOXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNHRSAyMDE2CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfR0VfMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCgpgYGAKCmBgYHtyfQojR0UgMjAxNwojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0dFXzIwMTckdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCmBgYHtyfQojRmlzZXJ2IDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9GaXNlcnZfMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYAoKYGBge3J9CiNGaXNlcnYgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0Zpc2Vydl8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI1dhc3RlIE1hbmFnZW1lbnQgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1dNXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKCmBgYHtyfQojV2lsbHMgVG93ZXIgMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1dpbGxzXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNXaWxscyBUb3dlciAyMDE4CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfV2lsbHNfMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KI1RyaXBhZHZpc29yIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl90cmlwYWR2aXNvcl8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojVHJpcGFkdmlzb3IgMjAxOAoKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl90cmlwYWR2aXNvcl8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI0Rhdml0YUtlbnQgCgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0Rhdml0YUtfMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCgpgYGAKYGBge3J9CiNEYXZpdGEgS2VudCAyMDE4CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfRGF2aXRhS18yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKCmBgYApgYGB7cn0KI1N0YXJidWNrcyAyMDE4CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfU3RhcmJ1Y2tzXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNNY0Nvcm1pY2sgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX01jQ29ybWlja18yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKCmBgYAoKYGBge3J9CiNJSFMgTWFya2l0IDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9JSFNfMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCgpgYGAKYGBge3J9CiNBTUQgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0FNRF8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojUmVzTWVkIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9SZXNNZWRfMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCgpgYGAKYGBge3J9CiNSZXNNZWQgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX1Jlc01lZF8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojQ0EgMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0NBXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCmBgYHtyfQojQ0EgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0NBXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKCmBgYHtyfQojR00gMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0dNXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCmBgYHtyfQojR00gMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0dNXzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCgpgYGB7cn0KI0FldG5hIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9BZXRuYV8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI0FldG5hIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9BZXRuYV8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KI05SRyAyMDE2CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfTlJHXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKYGBge3J9CiNOUkcgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX05SR18yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCmBgYHtyfQojTWVkdHJvbmljIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9NZWR0cm9uaWNfMjAxNiR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCgpgYGAKCmBgYHtyfQojTWVkdHJvbmljIDIwMTgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9NZWR0cm9uaWNfMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCgpgYGAKYGBge3J9CiNKdW5pcGVyIDIwMTYKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9KdW5pcGVyXzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCgpgYGB7cn0KI0p1bmlwZXIgMjAxOAojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0p1bmlwZXJfMjAxOCR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYApgYGB7cn0KCiNBZXRuYSBSYW1vbgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX0FldG5hUl8yMDE4JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKCmBgYApgYGB7cn0KI05ldGZsaXgKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9OZXRmbGl4XzIwMTYkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQpgYGAKCmBgYHtyfQojRGlzbmV5CiN2ZWN0b3IgY29udGFpbmluZyBvbmx5IHRoZSB0ZXh0CnRleHQgPC0gZGZfRGlzbmV5XzIwMTgkdGV4dAojY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQoKZG9jcyA8LSBkb2NzICU+JQogIHRtX21hcChyZW1vdmVOdW1iZXJzKSAlPiUKICB0bV9tYXAocmVtb3ZlUHVuY3R1YXRpb24pICU+JQogIHRtX21hcChzdHJpcFdoaXRlc3BhY2UpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoImVuZ2xpc2giKSkKCmR0bSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoZG9jcykgCm1hdHJpeCA8LSBhcy5tYXRyaXgoZHRtKSAKd29yZHMgPC0gc29ydChyb3dTdW1zKG1hdHJpeCksZGVjcmVhc2luZz1UUlVFKSAKZGZfd2MgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmFtZXMod29yZHMpLGZyZXE9d29yZHMpCgp3b3JkY2xvdWQod29yZHMgPSBkZl93YyR3b3JkLCBmcmVxID0gZGZfd2MkZnJlcSwgbWluLmZyZXEgPSAxLG1heC53b3Jkcz0yMDAsIHJhbmRvbS5vcmRlcj1GQUxTRSwgcm90LnBlcj0wLjM1LGNvbG9ycz1icmV3ZXIucGFsKDgsICJEYXJrMiIpKQoKYGBgCmBgYHtyfQojRm94IDIwMTUKI3ZlY3RvciBjb250YWluaW5nIG9ubHkgdGhlIHRleHQKdGV4dCA8LSBkZl9Gb3hfMjAxNSR0ZXh0CiNjb3JwdXMgIApkb2NzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dCkpCgpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQoKZHRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChkb2NzKSAKbWF0cml4IDwtIGFzLm1hdHJpeChkdG0pIAp3b3JkcyA8LSBzb3J0KHJvd1N1bXMobWF0cml4KSxkZWNyZWFzaW5nPVRSVUUpIApkZl93YyA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuYW1lcyh3b3JkcyksZnJlcT13b3JkcykKCndvcmRjbG91ZCh3b3JkcyA9IGRmX3djJHdvcmQsIGZyZXEgPSBkZl93YyRmcmVxLCBtaW4uZnJlcSA9IDEsbWF4LndvcmRzPTIwMCwgcmFuZG9tLm9yZGVyPUZBTFNFLCByb3QucGVyPTAuMzUsY29sb3JzPWJyZXdlci5wYWwoOCwgIkRhcmsyIikpCmBgYAoKYGBge3J9CiNNaWNyb3NvZnQgMjAxNgojdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGRmX01pY3Jvc29mdF8yMDE2JHRleHQKI2NvcnB1cyAgCmRvY3MgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkKCmRvY3MgPC0gZG9jcyAlPiUKICB0bV9tYXAocmVtb3ZlTnVtYmVycykgJT4lCiAgdG1fbWFwKHJlbW92ZVB1bmN0dWF0aW9uKSAlPiUKICB0bV9tYXAoc3RyaXBXaGl0ZXNwYWNlKQpkb2NzIDwtIHRtX21hcChkb2NzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3Jkcywgc3RvcHdvcmRzKCJlbmdsaXNoIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmX3djIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKd29yZGNsb3VkKHdvcmRzID0gZGZfd2Mkd29yZCwgZnJlcSA9IGRmX3djJGZyZXEsIG1pbi5mcmVxID0gMSxtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSxjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgpgYGB7cn0KCmBgYAoK